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

Форум PHP

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

 

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

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

тема: Динамическое древовидное меню
 
 автор: wsnet   (04.01.2013 в 19:54)   письмо автору
 
 

Ребята, беспокоит еще один вопрос - точнее мыли об реализации. Все руки не доходили - а здесь потребовалось.

Хочется реализовать динамически раскрывающееся меню, то есть клацнул на пункт меню - открылись его подпункты, клацнул на другой пункт меню - открылись его подпункты.

Что сейчас я сделал - загрузил из базы данные об родителе и его потомках, то есть имеем ассоциированный массив, в котором ключом является родитель, а элементами являются потомки этого родителя.

Далее основной вопрос - как собственно передавать через GET-массив параметры выбранных ид пунктов меню, чтобы уже по ним выводить дерево.

  Ответить  
 
 автор: cheops   (05.01.2013 в 10:07)   письмо автору
 
   для: wsnet   (04.01.2013 в 19:54)
 

Хм... а их много? Обычно в любой момент времени выбранным остается один пункт меню, у вас используется какой-то другой интерфейс?

  Ответить  
 
 автор: wsnet   (05.01.2013 в 13:02)   письмо автору
 
   для: cheops   (05.01.2013 в 10:07)
 

cheops я имею ввиду, что когда пользователь разворачивает дерево надо как-то запоминать те узлы дерева, которые он развернул, дабы потом по ним разворачивать дерево.

Что можете порекомендовать ? Как лучше сделать ?

  Ответить  
 
 автор: cheops   (05.01.2013 в 15:28)   письмо автору
 
   для: wsnet   (05.01.2013 в 13:02)
 

Такие вещи лучше помещать в cookie или в хранилище - не перегружайте сервер, у него и так работы очень много, а клиентские машины сплошь простаивают.

  Ответить  
 
 автор: wsnet   (05.01.2013 в 17:08)   письмо автору
 
   для: cheops   (05.01.2013 в 15:28)
 

Игорь, я реализовал это следующим образом:
1. Загружаем наши данных из бд в два массива:

// заполнение дерева
        $query = "SELECT id, parent_id, name FROM section";
        $roots = array();  
        $children = array();  
        $res = mysql_query($query);
        if(!$res)
        {
            echo "<p><font color=red>Ошибка: Ошибка запроса к таблице базы данных:".mysql_error()."</font></p>";
            exit();
        }
        while ($row = mysql_fetch_object($res))  
        {  
            if ($row->parent_id == 0) 
                $roots[] = $row;
            else
                $children[$row->parent_id][] = $row;
        }
        echo showTree( $roots, $children, 1, $root );


2. Непосредственно выводим дерево:

function showTree($nodes,$children,$level,$root)
    {
        $html = "";
        $roots_array = explode(";",$_GET['roots']);
        foreach($nodes as $node)
        {
            $povtor = str_repeat("&nbsp",$level);
            $html .= $povtor."<a href='{$_SERVER[PHP_SELF]}?roots=".$root.$node->id."'>".$node->name."</a><br />"; 
            if (in_array($node->id,$roots_array))
                if(isset( $children[$node->id])) 
                    $html .= showTree( $children[$node->id], $children, $level+1,$root.$node->id.";");  
        }
        return $html;
    }


Что здесь ты бы подправил, я не очень понял, в cookie что нужно помещать ?

Как пример вывод дерева происходит после разборы GET -параметра:

index.php?roots=2;10

  Ответить  
 
 автор: cheops   (05.01.2013 в 18:03)   письмо автору
 
   для: wsnet   (05.01.2013 в 17:08)
 

Воспользуйтесь не $_GET-массивом, $_COOKIE, а функцию сохранения текущего состояния меню возложите на JavaScript.

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

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