【问题标题】:PHP: Directory Navigation MenuPHP:目录导航菜单
【发布时间】:2011-02-18 03:30:49
【问题描述】:

我有一个无法找到答案/脚本的问题。我只是在学习使用 PHP。我正在使用 Perch 作为 CMS,并且到目前为止一切顺利。

我在添加新页面时遇到了麻烦。我想让 PHP 做的事情是能够为该目录创建一个动态导航菜单。

例如,我的“关于”目录中有三个页面。

root /about /index.php - page2.php - page3.php

我希望能够仅基于该目录输出侧导航菜单。

Home - Page2 - Page3

当客户/用户创建新页面时,它会自动将其添加到列表中。所以...

root /about /index.php - page2.php - page3.php - newPage.php

...创造...

Home - Page2 - Page3 - New Page

谁能给我指明脚本的方向或帮助我开始?

谢谢!

【问题讨论】:

    标签: php content-management-system directory navigation


    【解决方案1】:

    有很多 php 函数可以遍历目录。我认为最干净的是使用 PHP SPL(标准 PHP 库)的目录迭代器。

    http://www.php.net/manual/en/class.directoryiterator.php

    $dir = new DirectoryIterator('about');
    foreach ($dir as $fileinfo) {
        if (!$fileinfo->isDot()) {
            // Can make the link here
            echo $fileinfo->getFilename();
        }
    }
    

    优点是你有很多可用的类函数。

    如果您需要的不仅仅是您可以使用的文件名:

    • getPathname()
    • getPath()
    • getBasename()
    • isDir()

    等等...查看文档以了解所有可能性。

    【讨论】:

    • 感谢您的评论!我敢肯定,从这里,我将能够弄清楚。非常感谢!
    【解决方案2】:
    foreach (glob('*.php') as $filename) {
        echo $filename; //Make menu item here
    }
    

    但是,您可能不应该根据您的文件系统创建菜单。我建议你使用模板引擎,比如Smarty

    【讨论】:

    • 感谢 arex 的回答,也感谢 Smarty 的指导,我一定会调查的。 =)
    【解决方案3】:

    当然可以。我使用此方法查找目录中的所有文件并将文件的名称和扩展名添加到数组中。通过 while 循环的魔力,我可以为每个文件做一些事情。

    $files = scandir('directory/of/files/');
    

    这将创建一个名为 $files 的新数组。您可以使用 while 或 for each 循环。在这种情况下,我使用 for each,因为它是最简单的。

    foreach ($files as $value)
    {
      $file = explode('.',$value); // Explode splits a variable by whatever
    

    现在您已经有了文件和文件的实际名称,您可以将它们添加到您的导航中。我会将文件名添加到变量中。

      $navigation .= $file['0']; // Adds the file's name to the navigation variable
    }
    

    您可以将$file['0'] 包裹在<span><li> 中,并为您的导航添加适当的样式。我建议在 Google 上搜索一些精美的导航示例。我使用无序列表并使用 CSS 设置样式。

    玩弄 foreach 循环和样式以获得完美的导航;)

    【讨论】:

    • 你需要考虑'.'和'..'
    • 感谢 Jazza 和 Jacob 的帮助,我将对此进行调查,我相信这足以与其他 cmets 一起解决!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多