【问题标题】:Making a sidebar menu like mega.nz制作类似 mega.nz 的侧边栏菜单
【发布时间】:2017-07-04 15:53:13
【问题描述】:

我想在 php 中制作一个类似于网站 mega.nz 的侧边栏菜单.. 像这样

我已尝试使用此代码:

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;
}

但问题是文件夹无法识别文件夹内是否还有一个文件夹或文件列表。 我想,如果文件夹里面有文件列表,请转到另一个链接 如果是文件夹,再多一个文件夹,做下拉菜单,显示这个文件夹。

【问题讨论】:

  • 您想只列出文件夹,即使它们是空的?您在使用您提供的功能时是否遇到任何错误?

标签: php html sidebar


【解决方案1】:

要跳过空文件夹或只有文件的文件夹,请将函数更改为:

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;}

【讨论】:

    【解决方案2】:

    其他解决方案:用一个不错的插件帮你搞定树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'
              }
            }
          });
       }
      }); 
    });
    

    【讨论】:

    • 我可以在jstree中使用php吗?将获取文件夹的名称放在服务器中?
    • 是的,你可以。您需要 PHP 从后端获取文件夹并以文档中描述的预期格式提供它们。
    猜你喜欢
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 2017-05-29
    • 2022-11-15
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多