0

以前にも同様の質問があったと思いますが、自分がやりたいことが論理的に可能かどうかについて、頭を悩ませることはできません。

現在、イントラネットで 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 レイアウトを作成したいと思います。

開始タグを実行することは可能かもしれないと思いますが、そのディレクトリがすべてリストされたら終了タグを実行する方法がわかりません。

4

3 に答える 3

2

再帰的なソリューションは次のようになります。

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;
}

これは完全にテストされていませんが、うまくいけば役立つはずです。

于 2013-06-17T12:57:40.867 に答える
1

さて、ジムのサンプルコードのおかげで、私は次のようになりました:

    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 の絶対的な魅力のように機能し、関数を使用してメニューを作成するときに、必要に応じて一般的または詳細にすることができます。

私はこれを答えとしてマークしますが、ジムはコードに関して可能な限り最高の出発点を教えてくれました!

于 2013-06-18T10:36:06.717 に答える