2010-08-04 2 views
0

재귀 함수를 사용하여 내 사이트 메뉴를 작성하는 아이디어를 실제로 파고 있지만 문제가 발생하여 지금 내 머리를 두드려왔다. . 중첩 목록을 반환하려면 메뉴 기능이 필요하지만 트리의 비활성 irelevent 요소를 표시하지 않습니다.중첩 목록으로 사이트 탐색을 만들지 만 불필요한 메뉴 항목이없는 PHP 재귀 함수

세부 사항. 나는 navigation item (target, link_text, title 등)을위한 일반적인 필드와 각 아이템의 unique id, 그리고 중요한 parent_id를 저장하는 menu_items라는 테이블을 가진 MySql 데이터베이스를 가지고있다.

이 모든 정보는 논쟁의 여지가 있습니다. 예를 들어이 정보를 XML 파일에 저장하는 것이 더 쉬운가? 여기 예를 들어

는 표시된 모든 요소를 ​​예를 들어 메뉴입니다 :

<ul> 
    <li><a href="1.html">link 1</a> 
     <ul> 
      <li><a href="1-1.html">link 1-1</a> 
      <li><a href="1-2.html">link 1-2</a> 
     </ul> 
    </li> 
    <li><a href="2.html">link 2</a> 
     <ul> 
      <li><a href="2-1.html">link 2-1</a> 
      <li><a href="2-2.html">link 2-2</a> 
     </ul> 
    </li> 
    <li><a href="3.html">link 3</a></li> 
</ul> 

그러나

현재 페이지 내가이 같은 메뉴를 갖고 싶어 1-2.html 예를 들어 경우 :

<ul> 
    <li><a href="1.html">link 1</a> 
     <ul> 
      <li><a href="1-1.html">link 1-1</a> 
      <li><a href="1-2.html">link 1-2</a> 
     </ul> 
    </li> 
    <li><a href="2.html">link 2</a></li> 
    <li><a href="3.html">link 3</a></li> 
</ul> 

분명히 나는 ​​현재 페이지의 ID 나 이름을 메뉴 기능에 전달할 것입니다.

아무도 아이디어가 없습니까? 나는 얼마 동안 벽에 머리를 대고있다 :-)

답변

0

이것은 databse가 페이지 ID, 부모 ID, 링크 (퍼머 링크) 및 제목을 가지고있는 나의 완전한 방법이다. 도움이되기를 바랍니다.

function make_nav($current_page_id) 
{ 
    nav_rec(0, $current_page_id, constant('SITE_URL'), 0); 
} 

function nav_rec($page, $current_page_id, $link, $level) 
{ 
    if (!$page) 
    { 
     $page = array(); 
     $page['page_id'] = '0'; 
    } 
    else 
    { 
     ?><a class="nav-link nav-level-<?= $level ?>" href="<?= $link ?>"><?= $page['title'] ?></a><? 
    } 

    // Checks for the subpages from this page. 
    $page_q = " 
     SELECT id AS page_id, parent_id, permalink, page_title AS title 
     FROM ".constant('MYSQL_PREFIX')."pages 
     WHERE `page_type` = 'page' 
     AND `in_nav` = '1' 
     AND `status` = 'published' 
     AND `is_deleted` = '0' 
     AND `parent_id` = '".$page['page_id']."'"; 

    if ($page_rs = mysql_query($page_q)) 
    { 
     if (mysql_num_rows($page_rs)) 
     { 
      while($page = mysql_fetch_assoc($page_rs)) 
      { 
       nav_rec($page, $current_page_id, $link . $page['permalink'].'/', $level+1); 
      } 
     } 
     else 
     { 
      $level = 0; 
     } 
    } 
    else 
    { 
     $level = 0; 
    } 
} 
+0

그리고 분명히 질문을 제대로하지 못했습니다. 내 것은 그렇게하지 않습니다. 개인적으로 jQuery를 사용하여 메뉴에 대한 서브 페이지 링크를 열 수 있습니다. – Alex