2013-06-17 5 views
0

나는 비슷한 질문을하기 전에 질문을 받았다고 생각하지만, 내가하고 싶은 일이 논리적으로 가능한지 내 머리를 감쌀 수 없다.PHP 재귀 적 디렉토리 메뉴

현재 모든 직원이 액세스 할 수있는 문서를 나열하려면 인트라넷에 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> 

내가 그것을 다차원 배열의 일종 및 재귀 디렉토리를 포함 할 것이라고 생각

메뉴 구조는 다음과 같을 것 iterator,하지만 각 폴더를 통해 위와 같이 HTML 레이아웃을 만들고 싶습니다.

열기 태그를 사용하는 것이 가능할 수 있지만 디렉토리가 모두 나열되면 닫는 태그를 수행하는 방법을 알지 못한다고 생각합니다.

답변

1

재귀 솔루션은 같은 것을 볼 수 있었다.

+0

멋지 네요, 이것으로 주위를 둘러보고 내가 생각해 낼 수있는 것을 보게 될 것입니다. – Eds

1

쉬운 방법은 나무를 사용하는 것입니다. 나는 추천한다 Nested model 당신은 항목의 현재 및 perv lvl을 확인할 수 있습니다. 이것은 완전히 안된 그러나 희망 도움이

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

:

+0

감사합니다. 조사해보세요. – Eds

0

좋아, 그래서 여기에 내가 짐의 예제 코드 덕분에 결국 무엇을 : 내 DDSMoothMenu 절대 매력과 같은

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

작품, 나는 같은 일반적인 일이나 내가 원하는대로 세분화로 사용하는 경우 수 메뉴를 만드는 기능.

나는 이것을 답으로 표시 하겠지만 Jim은 가능한 최고의 코드 시작점을 알려주었습니다.

관련 문제