Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как обернуть в DIV блок из подкатегорий, при выводе дерева из mysql 
V
    Опции темы
mark2011
Дата 28.6.2011, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 28.6.2011

Репутация: 2
Всего: 2



Всем доброго времени суток!

По порядку опишу все структуры, потом задам вопрос.

Есть база данных. Соответственно есть id, parent_id и name. Есть и другие поля, но они не значимы для вопроса. 
Есть функция PHP которая выводит дерево из mysql:

Код

function ShowTree($pid=0)
    {
    
    $tree = array();
    $ret = "";
    global $db;
    
    $query = 'SELECT * FROM goods where level in (1, 2)';
    $db->query($query);
    
    while ($row = $db->parse_query('array'))
    {
        $tree[$row['rodit_kod']][$row['elem_id']] = $row['name'];    
    }

        foreach($tree as $id=>$root)
        {
            if($pid!=$id)continue;
            
            if(count($root))
            {
                foreach($root as $key => $title)
                {
                    if ($pid != "0")
                    {
                        if (isset($_GET['id']) && ($_GET['id'] == $key))
                        {
                            $class = ' underlined';
                        }
                        
                        else
                        {
                            $class = '';
                        }
                        
                        /* выводятся второстепенные пункты меню (потомки) */
                        $ret .= "<li><span class=\"submenu".$class."\"><a href=\"test.php?id=".$key."\">".$title."</a></span>";
                        //$ret .="</div>";
                    }    
                    
                    
                    
                    else
                    {
                        /* выводятся главные пункты меню */
                        
                        $ret .= "<li class=\"main_menu_on\"><span class=\"clr\"><a href=\"#\" onClick=\"test_alert(".$key."); return false;\">".$title."</a></span></li>";
                        $ret .= "<div>";
                    }
                        
                        
                    
                    
                    if(count($tree[$key]))
                    {
                        $ret .= ShowTree($key);
                    }
                
                }
                
                
            }
        }
return $ret;

}


На выходе получается вот такой HTML код: (сорри за неформатированность, это прямо из исходного кода взято)

Код

<ul id="right_menu">
        <li class="main_menu_on">
               <span class="clr">
                         <a href="#" onClick="test_alert(90); return false;">DVD</a>
              </span>
        </li>
        <div>
        <li>
              <span class="submenu">
                     <a href="test.php?id=99347248">*Music</a></span>
        <li>
               <span class="submenu">
                     <a href="test.php?id=99347319">*RUS</a>
              </span>
          <li>
              <span class="submenu">
                     <a href="test.php?id=99347320">*Зарубежные</a>
              </span>
          <li>
              <span class="submenu">
                   <a href="test.php?id=99347247">*Индия</a>
             </span>
           <li>
               <span class="submenu">
                  <a href="test.php?id=99347341">*Мультфильмы</a>
              </span>
             <li>
                 <span class="submenu">
                   <a href="test.php?id=99347235">*Раскраски</a>
                </span>
             <li>
                <span class="submenu">
                   <a href="test.php?id=99344734">*Распродажа</a>
                </span>
              <li>
                <span class="submenu">
            <a href="test.php?id=99347317">*ТВ</a></span>
              <li>
               <span class="submenu">
           <a href="test.php?id=99347240">*Эротика</a>
               </span>
             <li class="main_menu_on">
          <span class="clr"><a href="#" onClick="test_alert(91); return false;">FUN Plastic</a></span>
            </li>
         <div>
             <li>
             <span class="submenu"><a href="test.php?id=222222">test2011</a></span>
              <li class="main_menu_on"><span class="clr"><a href="#" onClick="test_alert(7239); return false;">MP3</a></span></li>
          <div>
         <li class="main_menu_on"><span class="clr"><a href="#" onClick="test_alert(3830); return false;">Игры</a></span></li><div>
         <li class="main_menu_on"><span class="clr"><a href="#" onClick="test_alert(92); return false;">Игры</a></span></li><div>
         <li class="main_menu_on"><span class="clr"><a href="#" onClick="test_alert(93); return false;">Прочие</a></span></li><div>
         <li class="main_menu_on"><span class="clr"><a href="#" onClick="test_alert(94); return false;">Раскраски</a></span></li><div>
         <li class="main_menu_on"><span class="clr"><a href="#" onClick="test_alert(95); return false;">Фигурки</a></span></li><div>
         <li class="main_menu_on"><span class="clr"><a href="#" onClick="test_alert(96); return false;">Чистый склад</a></span></li><div>

    </ul>



А теперь суть. Всё что начинается со звёздочки есть пункт подкатегории. Всё остальное - категории. Сами подкатегории нужно показывать/скрывать в зависимости от их текущего состояния (своеобразный toggle). Может есть ещё способы, но я не нашёл другого, кроме как обернуть блок подкатегорий в div. Возникла проблема, поскольку функция рекурсивная и div работает совершенно не так, как мне нужно. Пробовал задавать какие-то математические условия, но пока точно не могу сообразить, что конкретно нужно написать.

Если есть какой-то другой способ реализовать нужный мне функционал, буду рад услышать любую помощь и объяснения по этому вопросу. Если нет - как сделать то, что уже имеется, т.е. обернуть блок подкатегорий в div?

Да, кстати. Если подкатегорий не будет (а такое есть в моём примере) то должен быть просто пустой div.

Всем заранее спасибо за помощь smile

Это сообщение отредактировал(а) mark2011 - 28.6.2011, 13:43
PM WWW ICQ Skype   Вверх
mark2011
Дата 28.6.2011, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 28.6.2011

Репутация: 2
Всего: 2



Как бы решено.
Отказался от привычного вывода дерева. Сначала вывожу первый уровень, формирую необходимые дивы, делаю их скрытыми. Далее по клику вывожу второй уровень. Получается дерево )))
PM WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1241 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.