【问题标题】:Dynamically build html menu (and sub-menus) using PHP使用 PHP 动态构建 html 菜单(和子菜单)
【发布时间】:2017-01-13 18:37:46
【问题描述】:

我想在特定文件夹中查找任何 html 文件,并根据结果构建我的菜单和子菜单:

例如我的项目文件可能是:'project1_qa_qa2.html',..., 'project2_dev_dev1.html', etc... 而explode() 应该返回 'project1', 'qa', 'qa2' ; ... ; “项目2”,“开发”,“开发1”; ...

我需要循环遍历每个元素 {project (1 or 2)、department (qa or dev) 和 id (dev1, qa2, ..)} 以动态方式构建我的菜单/子菜单。

我从http://callmenick.com/_development/slide-down-menu/获得了一个基本来源

我添加了我的硬编码示例代码,以展示我想要的样子。

<?php
    $cdir = scandir('./projects');
    foreach ($cdir as $filename){
    if(preg_match('/(\w+).html/',$filename,$project_name)){
        $projects_details = explode('_',$project_name[1]);
    }
?>
<div class="container">
   <nav>
      <ul class="content clearfix">
         <li><a href="#">Welcome</a></li>
         <li class="dropdown">
            <a href="#">Projects</a>
            <ul class="sub-menu" style="display: none;">
               <li><a href="#">Project1</a></li>
               <li class="dropdown">
                  <a href="#">Project2</a>
                  <ul class="sub-menu" style="display: none;">
                     <li class="dropdown">
                        <a href="#">Quality Insurance</a>
                        <ul class="sub-menu" style="display: none;">
                           <li><a href="#">QA1</a></li>
                           <li><a href="#">QA2</a></li>
                        </ul>
                     </li>
                     <li class="dropdown">
                        <a href="#">Development</a>
                        <ul class="sub-menu" style="display: none;">
                           <li><a href="#">Dev1</a></li>
                           <li><a href="#">Dev2</a></li>
                        </ul>
                     </li>
                  </ul>
               </li>
            </ul>
      </ul>
   </nav>
</div>

【问题讨论】:

标签: php jquery html nav


【解决方案1】:

这只是为了向您展示我使用了哪些代码并为您指明正确的方向。扫描目录:

function getFromDir( $dir ) {
    $cdir = scandir( $dir );
    $result = array();

    foreach( $cdir as $key => $value ) {
        if( !in_array( $value, array('.', '..') ) ) {
            if( is_dir( $dir . DIRECTORY_SEPARATOR . $value ) ) {
                $result[$value] = getFromDir($dir . DIRECTORY_SEPARATOR . $value);
            } else {
                $result[] = $value;
            }
        }
    }

    return $result;
}

如创建html的注释所示:

function outputMenu(array $array, $baseUrl = '/') {
    $html = '';
    foreach( $array as $key => $item ) {
        if( is_array( $item ) ) {
            $html .= '<li>'.$key.'<ul>';
            $html .= outputMenu($item, $baseUrl.$key.'/');
            $html .= '</ul></li>';
        } else {
            $html .= '<li><a href="'.$baseUrl.$item.'">'.ucfirst(substr($item, 0, -4)).'</a></li>';
        }
    }
    return $html;
}

echo outputMenu(getFromDir('./projects'));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-04
    • 2017-05-05
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2022-01-18
    相关资源
    最近更新 更多