2017-07-02 117 views
2

我想要像在PHP網站mega.nz一個工具欄菜單..這樣製作工具欄菜單像mega.nz

enter image description here

我有這個代碼的嘗試:

function foldersList($folderName = NULL) { 

    $return = ''; 

    $globFolder = ($folderName != NULL ? $folderName : './server/'.$_SESSION['username']) . "/*"; 


    foreach (glob($globFolder, GLOB_ONLYDIR) as $subFolder) { 

     $baseFolder = basename($subFolder) . ''; 
     // okay let me see 
     // call function to check subfolders - don't forget write `/` 
     $subFolders = foldersList($subFolder); 

     $return .= '<li><a><i class="fa fa-desktop"></i>' . $baseFolder . '<span class="fa fa-chevron-down"></span></a>'; 
     $return .= '<ul class="nav child_menu">'; 

     // if subfolder exist add to return variable 
     $return .= $subFolders != '' ? $subFolders : ''; 


     $return .= '</ul>'; 
     $return .= '</li>'; 
    } 

    return $return; 
} 

但問題是文件夾無法識別文件夾內是否有多個文件夾或有一個文件列表。 我想,如果文件夾裏面有文件列表,請到另一個鏈接 如果文件夾有多一個文件夾,使下拉菜單顯示該文件夾。

+0

即使文件夾爲空,您想僅列出文件夾嗎?您在使用您提供的功能時是否出現錯誤? –

回答

0

要跳過的空文件夾或只具有文件夾改變功能:

function foldersList($folderName = NULL) { 

$return = ''; 

$globFolder = ($folderName != NULL ? $folderName : './server/'.$_SESSION['username']) . "/*"; 

$folders = glob($globFolder, GLOB_ONLYDIR); 

if(!empty($folders)) { 
    foreach ($folders as $subFolder) { 

     $baseFolder = basename($subFolder) . ''; 
     // okay let me see 
     // call function to check subfolders - don't forget write `/` 
     $subFolders = foldersList($subFolder); 

     $return .= '<li><a><i class="fa fa-desktop"></i>' . $baseFolder . '<span class="fa fa-chevron-down"></span></a>'; 
     $return .= '<ul class="nav child_menu">'; 

     // if subfolder exist add to return variable 
     $return .= $subFolders != '' ? $subFolders : ''; 


     $return .= '</ul>'; 
     $return .= '</li>'; 
    } 
} 

return $return;} 
0

其他解決辦法:用一個不錯的插件來幫助你的樹https://www.jstree.com/

編輯:添加例子jstree的使用 的功能更改爲:

function foldersList($folderName = NULL) { 

$return = ''; 

$globFolder = ($folderName != NULL ? $folderName : 
    './server/'.$_SESSION['username']) . "/*"; 

$folders = glob($globFolder, GLOB_ONLYDIR); 
$foldersArray = []; 
if(!empty($folders)) { 
    foreach ($folders as $subFolder) { 
     $baseFolder = basename($subFolder) . ''; 
     // okay let me see 
     // call function to check subfolders - don't forget write `/` 
     $subFolders = foldersList($subFolder); 


     $foldersArray[] = [ 
      'text' => $baseFolder, 
      'children' => $subFolders 
     ]; 
    } 
} 
return $foldersArray;} 

下面是修改函數的輸出演示:https://jsfiddle.net/mrazvan/3sxh0b3c/1/

創建在運行該功能,迴響在一個PHP文件的JSON輸出文件:

echo json_encode(foldersList('path/to/folder/'));exit; 

要提取後端輸出,你可以嘗試使用下面的JS代碼:

$(function() { 
$.ajax({ 
    type: "GET", 
    dataType: "json", 
    url: "path/to/phpfile.php", 
    success: function(data) { 
     $('#tree-container').jstree({ 
     'plugins' : ['types'], 
     'core' : { 
      'data' : data, 
      'themes' : { 
      'variant' : 'medium' 
      } 
     } 
     }); 
    } 
    }); 
}); 
+0

和我可以在jstree中使用php?把服務器上的文件夾名稱? –

+0

是的,你可以。您需要PHP從後端獲取文件夾,並按照文檔中描述的預期格式提供它們。 –

+0

我使用php更新了我的答案 –