Динамически создавать меню html (и подменю) с помощью PHP

Я хочу искать любые html-файлы в определенной папке и создавать меню и подменю на основе результатов:

Например мои файлы проекта могут быть: ‘project1_qa_qa2.html’,…, ‘project2_dev_dev1.html’, etc… И explode()должен вернуть ‘project1’, ‘qa’, ‘qa2’;… ; ‘project2′,’ dev’,’ dev1′;…

I need to loop through each elements {project ( 1 или 2), department (qa или dev) , and 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>

1 ответ

  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'));