我认为之前已经提出了类似的问题,但我不能完全理解我想做的事情是否可以理解。
我目前在内联网上使用DDSmoothMenu列出了我们所有员工都可以访问的文档。
菜单结构类似于:
Documents -> Finance -> Forms -> File 1
-> File 2
-> File 3
-> Informational -> File 1
-> File 2
-> Insurance -> File 1
-> File 2
菜单的基本结构如下:
<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>
我认为它必须涉及某种多维数组和递归目录迭代器,但我想浏览每个文件夹并创建如上所述的HTML布局。
我认为可能会执行开始标记,但是不确定如果该目录全部列出后如何执行结束标记。
答案 0 :(得分:1)
更简单的方法是使用树木。我推荐Nested model 您可以检查项目的当前和每个项目。
答案 1 :(得分:1)
递归解决方案可能类似于:
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;
}
这完全未经测试,但应该有所帮助。
答案 2 :(得分:0)
好的,这就是我最后得到的结果,感谢Jim的示例代码:
function createMenu($dir) {
if(is_dir($dir)) {
echo "<li><a href='#'>".basename($dir)."</a><ul>";
foreach(glob("$dir/*") as $path) {
createMenuHTML($path);
}
echo "</ul></li>";
}
else {
$extension = pathinfo($dir);
$extension = $extension['extension'];
echo "<li><a href='$dir'>".basename($dir, ".".$extension)."</a></li>";
}
}
createMenu("/public/Documents");
对于我的DDSMoothMenu来说就像一个绝对的魅力,在使用该功能创建菜单时,我可以像我想要的那样一般或细化。
我会将此标记为答案,但Jim明智地给了我最好的起点!