За последние 24 часа нас посетили 35523 программиста и 1819 роботов. Сейчас ищут 843 программиста ...

Smarty, вывод вложенного меню из MySQL

Тема в разделе "PHP для новичков", создана пользователем Русланчек, 18 фев 2009.

  1. Русланчек

    Русланчек Активный пользователь

    С нами с:
    18 фев 2009
    Сообщения:
    13
    Симпатии:
    0
    Подскажите пожалуйста, уже несколько дней голову ломаю, нужно сделать меню, отображающее список элементов с привязкой дочерних элементов к их родителям. Не могу придумать логику как построить Smarty шаблон, чтобы он добовлял новый <UL> после определенного родительского элемента и добавлял в него новый список дочерних элементов, которые ему принадлежат и после окончания списка далее продолжал строить список родит. элементов.

    Пример того, что должно получиться

    Код (Text):
    1.  
    2. <ul>
    3.     <li>Пункт 1</li>
    4.     <li>Пункт 2
    5.         <ul>
    6.             <li>Пункт 2.1</li>
    7.             <li>Пункт 2.2
    8.                 <ul>
    9.                     <li>Пункт 2.3.1</li>
    10.                 </ul>
    11.             </li>
    12.             <li>Пункт 2.3</li>
    13.         </ul>
    14.     </li>
    15.     <li>Пункт 3</li>
    16. </ul>
    Что мы имеем
    Есть таблица "sometable" в MySQL, в ней есть 3 столбца "id", "name" и "parent" и 7 строк:

    id - name - parent
    1 - Пункт 1 - 1
    2 - Пункт 2 - 1
    3 - Пункт 3 - 1
    4 - Пункт 2.1 - 2
    5 - Пункт 2.2 - 2
    6 - Пункт 2.3 - 2
    7 - Пункт 2.3.1 - 6

    Код (Text):
    1.  
    2. //Получаю массив из БД
    3. $sql = mysql_query("SELECT * FROM sometable");
    4. while ($row = mysql_fetch_array($sql))
    5. $rows[] = $row;
    6.  
    7. //Передаю массив в шаблон
    8. $smarty->assign('menu', $rows);
    У меня пока вот так:
    Код (Text):
    1.  
    2. {section name=menu1 loop=$menu}
    3.     {if $menu[menu1].topsection eq 1}
    4.     <li>{$menu[menu1].menuname}</li>
    5.     {elseif $menu[menu1].topsection gt 1}
    6.         <ul>  
    7.         <li>{$menu[menu1].menuname}</li>  
    8.         </ul>
    9.     {/if}
    10. {/section}
    Но получается тупость :)