[英]PHP recursive directory menu
我認為之前已經提出了類似的問題,但是我無法完全理解我想要做的事情是否符合邏輯。
我目前在內聯網上使用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布局。
我認為可能會執行開始標記,但不確定如果該目錄全部列出后如何執行結束標記。
更簡單的方法是使用樹木。 我推薦嵌套模型你可以檢查項目的當前和perv lvl。
遞歸解決方案可能類似於:
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;
}
這完全未經測試,但應該有所幫助。
好的,所以這就是我最后得到的結果,感謝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明智地給了我最好的起點!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.