2010-05-26 5 views
3

작업중인 사이트에 동적 재귀 탐색 목록 메뉴를 추가하려고합니다. scenerio는 메뉴에 parentid (preid)와 관련된 2 개의 레벨이 있습니다.PHP 재귀 탐색 목록 메뉴에 대한 도움말

제 1 수준 목록을 올바르게 표시 할 수 있지만 제대로 표시하려면 두 번째 수준을 얻을 수 없습니다. 두 번째 레벨의 UL 및/UL 태그를 추가 할 위치가 확실하지 않습니다. 다음은

<ul> 
    <li>item 1 
    <ul> 
    </ul> 
    </li> 
    <li>item 2 
    <ul> 
     <li>sub item 1</li> 
     <ul> 
     </ul> 
     <li>sub item 2</li> 
     <ul> 
     </ul> 
    </ul> 
    </li> 
    <li>Sports Injuries 
    <ul> 
    </ul> 
    </li> 
    </ul> 
    </li> 
</ul> 

내가 메뉴를 만드는 데 사용하고있는 클래스 파일입니다 :

내가

<ul> 
<li>Item 1</li> 
<li>item 2</li> 
<li>item 3</li> 
<ul> 
    <li>sub item 1</li> 
    <li>sub item 2</li> 
</ul> 
<li>Item 4</li> 
<li>item 5</li> 
<ul> 
    <li>sub item 1</li> 
    <li>sub item 2</li> 
</ul> 
<li>item 6</li> 
</ul> 

이것은 내가 아래의 코드를 얻고 실제로 무엇 후 오전 무엇

나는 메뉴로 전화 :

누군가 레벨 2 UL 및/UL 태그를 배치해야하는 위치를 설명하고 설명해주십시오. 나는 지난 2 일 동안 이것으로 머리를 치고 있었다. 는 어떤 도움을 주시면 감사하겠습니다, 감사는 ... 중첩 된 목록에서

답변

11

, 하위 목록은 항상 element-- 목록들을 중첩 만드는거야 내 포함됩니다. 이 형식을 사용하여 하나의 기능에 대한 전체 목록을 인쇄 할 수 있습니다 (일반적인 코드에서,하지만 당신은 기본 아이디어 가야) :

function get_list($parent) { 
    $children = query('SELECT * FROM table WHERE parent_id = '.$parent); 
    $items = array(); 
    while($row = fetch_assoc($children)) { 
     $items[] = '<li>'.$row['name'].get_list($row['id']).'</li>'; 
    } 
    if(count($items)) { 
     return '<ul>'.implode('', $items).'</ul>'; 
    } else { 
     return ''; 
    } 
} 

을 그리고 이것은 당신에게로 제대로 구성 목록을 줄 것이다 :

<ul> 
    <li>Item 1</li> 
    <li>Item 2 
     <ul> 
      <li>Item 2.1</li> 
      <li>Item 2.2</li> 
     </ul> 
    </li> 
</ul> 
+0

안녕 다니엘, 당신은 전문가입니다, 시간 내 주셔서 대단히 감사합니다. 당신의 대답은 매력처럼 작동합니다 ... – Jason

+0

감사합니다 이것은 실제로 엄청난 도움이되었습니다! – verenion

0

이 질문은 question과 완전히 똑같지는 않지만 2 일 전에 게시 한 내용은 내가 DB가 아닌 폴더로 수행하려고 시도한 결과입니다. 다음은 지정된 $ 경로의 디렉토리와 모든 하위 디렉토리를 탐색하고 스크립트 실행 완료시 중첩 된 정렬되지 않은 목록에 결과를 표시합니다. 희망이 도움이됩니다.

<?php 
function readDirs($path){ 
    $dirHandle = opendir($path); 
    echo "<ul>"; 
    while ($item = readdir($dirHandle)) { 
     $newPath = $path . "/" . $item; 

     if (is_dir($newPath) && $item != '.' && $item != '..') { 
      echo "<li><a href='$newPath'>$item</a>"; 
      readDirs($newPath); 
     } 
    } 
    echo "</li></ul>"; 
} 
$path = "./galleries"; 
readDirs($path); 

?>