2010-08-04 7 views
0

Я действительно раскопаю идею использования функции рекурсии для создания моих меню на сайте, но у меня возникла проблема, и у меня возникла проблема с головой , Мне нужна моя функция меню для возврата вложенного списка, но я не хочу, чтобы отображались неактивные элементы, имеющие отношение к дереву.PHP рекурсивная функция, чтобы создать навигацию по сайту в виде вложенного списка, но без ненужных пунктов меню

Подробнее. У меня есть база данных MySql с таблицей, называемой menu_items, которая хранит все обычные поля для элемента навигации (target, link_text, title и т. Д.), А также уникальный идентификатор для каждого элемента и, что важно, parent_id.

Это все для обсуждения, хотя, например, было бы легче хранить эту информацию в 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> 

Очевидно, я передал бы либо идентификатор, либо имя текущей страницы в функцию меню.

Любые идеи кто-нибудь? Я уже несколько секунд стуча головой о стену :-)

ответ

0

Это мой полный метод, когда у databse есть идентификатор страницы, родительский идентификатор, ссылка (permalink) и заголовок; Надеюсь, поможет.

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