Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: нарисовать список (меню - подменю)
 
 автор: moonfox   (06.07.2009 в 12:00)   письмо автору
 
 

Здравствуйте, помогите с вопросом... все никак не выходит :(

есть две таблицы в БД, одна содержит список имен ссылок меню сайта, а вторая содержит список подменю ссылок.
Задача построить правильный список <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}&amp;t={if $menu[menu].type==1}2{else}1{/if}&amp;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 в 17:41)   письмо автору
 
   для: moonfox   (06.07.2009 в 12:00)
 

совсем никак?

  Ответить  
 
 автор: talka   (06.07.2009 в 17:53)   письмо автору
 
   для: 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>'

    } 

?>

  Ответить  
 
 автор: moonfox   (06.07.2009 в 18:58)   письмо автору
 
   для: talka   (06.07.2009 в 17:53)
 

во я тормоз....... долго искал на что проверить...
спасибо

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования