使用有关此主题的先前问题,我已经能够创建一个递归函数来显示菜单中目录的内容,但是,当涉及实际文件名时,我遇到了递归深度的问题。 / p>
当目录的深度增加时,我无法弄清楚如何存储/引用父目录路径,以使href正确。
使用下面的代码和一个示例目录结构,如下所示,我为href创建的文件路径适用于顶级目录,但我需要一种方法来保留父目录路径,因为它在目录中更深入结构体。在InnerSection内部的file.html链接(例如simple)生成为file / InnerSection / file.html而不是files / Section2 / Innersection / file.html。
任何帮助都将不胜感激。
Files Section1 Section2 file.html InnerSection file.html
function findDir($path){
$dir=directory_map($path, 0);
return $this->recursive($dir, $path);
}
function recursive($arr, $path) {
global $menu;
global $current_path;
foreach ($arr as $key => $val) {
if (is_array($val)){
$current_path =rtrim($key, '\\');
$menu.= "<li data-role='collapsible' data-iconpos='right' data-shadow='false' data-corners='false'>";
$menu.= "<h3>".rtrim($key, "\\")."</h3>";
$menu.= "<ul data-role='listview' data-shadow='false' data-inset='true' data-corners='false'>";
$this->recursive($val, $path);
$menu.= "</ul></li>"; //finish directory listing
} else {
$menu.= "<li><a class='load-file' data-file='". $path."/".$current_path."/".$val . "' href='". $path . "/" . $current_path . "/" . "$val''>".$val."</a></li>"; //List file
}
}
return $menu;
}
答案 0 :(得分:0)
不幸的是,我无法在上面发布解决方案。
我最终选择了一个不那么优雅的解决方案。我创建了一个帮助函数,我可以从视图中调用,所以我能够使用使用echo的解决方案来输出菜单。
感谢Gordon的投入。
function createMenu($dir) {
if(is_dir($dir)) {
echo "<li><a href='#'>".basename($dir)."</a><ul>";
foreach(glob("$dir/*") as $path) {
createMenu($path);
}
echo "</ul></li>";
}
else {
$extension = pathinfo($dir);
$extension = $extension['extension'];
echo "<li><a class='load-file' data-file='$dir' href='". basename($dir, ".".$extension). "'>".basename($dir, ".".$extension)."</a></li>";
}
}