Codeigniter递归目录映射菜单文件路径问题


Codeigniter recursive directory map menu file path issue

使用之前关于此主题的问题,我已经能够创建一个递归函数来在菜单中显示目录的内容,但在实际文件名时,我遇到了递归深度的问题。

当目录的深度增加时,我不知道如何存储/引用父目录路径以使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>";
    }
}