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

时间:2016-01-10 10:58:34

标签: php codeigniter recursion

使用有关此主题的先前问题,我已经能够创建一个递归函数来显示菜单中目录的内容,但是,当涉及实际文件名时,我遇到了递归深度的问题。 / 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;
}

1 个答案:

答案 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>";
    }
}