|
|
|
| Здравствуйте, помогите с вопросом... все никак не выходит :(
есть две таблицы в БД, одна содержит список имен ссылок меню сайта, а вторая содержит список подменю ссылок.
Задача построить правильный список <ul><li>....
должно выйти следующее:
<ul>
<li>главная страница
<ul>
<li>под ссылка номер один</li>
<li>под ссылка номер два</li>
<li>под ссылка номер три</li>
</ul>
</li>
<li>новости</li>
<li>архив
<ul>
<li>под ссылка номер один</li>
<li>под ссылка номер два</li>
</ul>
</li>
<li>контакты</li>
</ul>
|
код php:
<?
//получаем список родительского меню
$db->query('SELECT `id`, `title_'.$lang.'`, `template`, `links`, `type` FROM `menu` WHERE `active` != 0 ORDER BY `pos` ASC');
$menu = $db->fetch(); // здесь 'многомерный' массив
//выводим в цикле имена родительских ссылок
for($i=0; $i<=count($menu)-1; $i++)
{
echo '<li>',$menu[$i][1]; // имена ссылок родительского меню
// - вот здесь надо при наличии элементов подменю открывать <ul>
// делаем выборку дочерних сылок из таблицы подменю
$res =mysql_query('SELECT `id`, `title_'.$lang.'`, `template`, `links`, `sub_id`, `type` FROM `sub_menu` WHERE `sub_id` = '.$menu[$i]['id'].' ORDER BY `pos` ASC');
while($a = mysql_fetch_array($res))
echo '<li>',$a[1],'</li>'; // выводим имена дочерних ссылок
// - вот здесь надо при наличии элементов подменю закрывать </ul>
echo '</li>';
}
?>
проблема заключается в том, что если вставлять вывод <ul>...</ul> до и после выборки элементов подменю - выдает и с пустыми под ссылками<ul></ul>, а если в цикле - то выдает <ul>...</ul> - для каждого элемента подменю...
|
или так со смарти:
<?
$db->query('SELECT `id`, `title_'.$lang.'`, `template`, `links`, `type` FROM `menu` WHERE `active` != 0 ORDER BY `pos` ASC');
$smarty->assign('menu',$db->fetch());
$db->query('SELECT `id`, `title_'.$lang.'`, `template`, `links`, `sub_id`, `type` FROM `sub_menu` WHERE `active` != 0 ORDER BY `pos` ASC');
$smarty->assign('sub_first',$db->fetch());
?>
tpl:
<ul class="dropdown dropdown-vertical">
{section name = menu loop = $menu}
<li><a href="index.php?{if $menu[menu].type == 1}sid{else}id{/if}={$menu[menu].id}&t={if $menu[menu].type==1}2{else}1{/if}&lang={$lang}">{$menu[menu][1]}</a>
----- ТУТ UL
{section name = sub_one loop = $sub_first}
{if $menu[menu].id == $sub_first[sub_one].sub_id}
<li>{$sub_first[sub_one][1]}</li>
{/if}
{/section}
--- ТУТ /UL
</li>
{/section}
</ul>
|
| |
|
|
|
|
|
|
|
для: moonfox
(06.07.2009 в 12:00)
| | совсем никак? | |
|
|
|
|
|
|
|
для: moonfox
(06.07.2009 в 17:41)
| | можно так:
<?
//получаем список родительского меню
$db->query('SELECT `id`, `title_'.$lang.'`, `template`, `links`, `type` FROM `menu` WHERE `active` != 0 ORDER BY `pos` ASC');
$menu = $db->fetch(); // здесь 'многомерный' массив
//выводим в цикле имена родительских ссылок
for($i=0; $i<=count($menu)-1; $i++)
{
echo '<li>',$menu[$i][1]; // имена ссылок родительского меню
// - вот здесь надо при наличии элементов подменю открывать <ul>
// делаем выборку дочерних сылок из таблицы подменю
$res =mysql_query('SELECT `id`, `title_'.$lang.'`, `template`, `links`, `sub_id`, `type` FROM `sub_menu` WHERE `sub_id` = '.$menu[$i]['id'].' ORDER BY `pos` ASC');
$cnt=mysql_num_rows($res); // кол-во рядов
if($cnt > 0) {
echo "<ul>"; // открываем
while($a = mysql_fetch_array($res)) echo '<li>',$a[1],'</li>'; // выводим имена дочерних ссылок
echo "</ul>"; // закрываем
}
// - вот здесь надо при наличии элементов подменю закрывать </ul>
echo '</li>';
}
?>
|
| |
|
|
|
|
|
|
|
для: talka
(06.07.2009 в 17:53)
| | во я тормоз....... долго искал на что проверить...
спасибо | |
|
|
|