PHP递归目录菜单 [英] PHP recursive directory menu

查看:124
本文介绍了PHP递归目录菜单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我认为以前也有类似的问题,但我无法完全理解我想要做的事情是否合乎逻辑。



我目前使用DDSmoothMenu在我们的内部网上列出了所有员工都可以访问的文档。

菜单结构可能类似于:

 文件 - >金融 - >表格 - >档案1 
- >文件2
- >文件3
- >信息 - >档案1
- >文件2
- >保险 - >档案1
- >文件2

菜单的基本结构如下:

 < ul> 
< li>< a href ='#'>子菜单名称< / a>
< ul>
< li>< a href ='#'>菜单项< / a>< / li>
< li>< a href ='#'>菜单项< / a>< / li>
< li>< a href ='#'>菜单项< / a>< / li>
< li>< a href ='#'>菜单项< / a>< / li>
< / ul>
< / li>
< / ul>

我认为它必须涉及某种多维数组和递归目录迭代器,但是我会喜欢浏览每个文件夹并创建如上所示的HTML布局。



我认为可以做开始标记,但不知道如何做结束标签一旦该目录全部列出。

解决方案

递归解决方案可能如下所示:

 函数createMenuHTML($ dir){
$ html =;
if(is_dir($ dir)){
//目录 - 添加子菜单
$ html。=< li>< a href ='#'>子菜单名称< ; / A>< UL>中;
if($ dh = opendir($ dir)){
while(($ file = readdir($ dh))!== false){
$ html。= createMenuHTML($ dir 。$文件);
}
closedir($ dh);
}
$ html。=< / ul>
} else {
//文件所以只需添加列表项
$ html。=< li>< a href ='#'>。basename($ dir)。 < / A>< /锂> 中
}
返回$ html;
}

这完全没有经过测试,但应该有所帮助。 b

I think similar questions have been asked before, but I can't quite wrap my head around whether what I want to do is logicaly possible.

I currently use DDSmoothMenu on our intranet to list documents that we have for all staff to access.

Menu structure would be something like:

Documents -> Finance -> Forms -> File 1
                              -> File 2
                              -> File 3
                     -> Informational -> File 1
                                      -> File 2
          -> Insurance -> File 1
                       -> File 2

The basic structure of the menu is below:

<ul>
  <li><a href='#'>Sub Menu Name</a>
    <ul>
      <li><a href='#'>Menu Item</a></li>
      <li><a href='#'>Menu Item</a></li>
      <li><a href='#'>Menu Item</a></li>
      <li><a href='#'>Menu Item</a></li>
    </ul>
  </li>
</ul>

I think it would have to involve some kind of multidimensional array and a recursive directory iterator, but I would like to go through each folder and create the HTML layout as above.

I think it may be possible to do the opening tags, but not sure how to then do the closing tags once that directory is all listed.

解决方案

A recursive solution could look something like:

function createMenuHTML($dir){
    $html = "";
    if(is_dir($dir)){
        //Directory - add sub menu
        $html .= "<li><a href='#'>Sub Menu Name</a><ul>";
        if ($dh = opendir($dir)) {
            while (($file = readdir($dh)) !== false) {
                $html .= createMenuHTML($dir.$file);
            }
            closedir($dh);
        }
        $html .= "</ul>"
    }else{
        //File so  just add list item
        $html .= "<li><a href='#'>".basename($dir)."</a></li>"
    }
    return $html;
}

This is entirely untested but should hopefully help.

这篇关于PHP递归目录菜单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆