使用之前关于此主题的问题,我已经能够创建一个递归函数来在菜单中显示目录的内容,但在实际文件名时,我遇到了递归深度的问题。
当目录的深度增加时,我不知道如何存储/引用父目录路径以使href正确。
使用下面的代码和一个示例目录结构,如下面的文件路径,我为href创建的文件路径适用于顶级目录,但我需要一种方法来保留父目录路径,因为它在目录结构中更深入。例如,到InnerSection中file.html的链接simple生成为file/InnerSection/file.html,而不是files/Section2/InnerSection/file.html。
如有任何帮助,我们将不胜感激。
文件第1节第2节file.htmlInnerSectionfile.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;
}
不幸的是,我无法使上面发布的解决方案正常工作。
我最终选择了一个不那么优雅的解决方案。我创建了一个助手函数,我可以从视图中调用它,这样我就可以使用使用echo输出菜单的解决方案。
感谢戈登的投入。
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>";
}
}