|
|
|
| Ребята, беспокоит еще один вопрос - точнее мыли об реализации. Все руки не доходили - а здесь потребовалось.
Хочется реализовать динамически раскрывающееся меню, то есть клацнул на пункт меню - открылись его подпункты, клацнул на другой пункт меню - открылись его подпункты.
Что сейчас я сделал - загрузил из базы данные об родителе и его потомках, то есть имеем ассоциированный массив, в котором ключом является родитель, а элементами являются потомки этого родителя.
Далее основной вопрос - как собственно передавать через GET-массив параметры выбранных ид пунктов меню, чтобы уже по ним выводить дерево. | |
|
|
|
|
|
|
|
для: wsnet
(04.01.2013 в 19:54)
| | Хм... а их много? Обычно в любой момент времени выбранным остается один пункт меню, у вас используется какой-то другой интерфейс? | |
|
|
|
|
|
|
|
для: cheops
(05.01.2013 в 10:07)
| | cheops я имею ввиду, что когда пользователь разворачивает дерево надо как-то запоминать те узлы дерева, которые он развернул, дабы потом по ним разворачивать дерево.
Что можете порекомендовать ? Как лучше сделать ? | |
|
|
|
|
|
|
|
для: wsnet
(05.01.2013 в 13:02)
| | Такие вещи лучше помещать в cookie или в хранилище - не перегружайте сервер, у него и так работы очень много, а клиентские машины сплошь простаивают. | |
|
|
|
|
|
|
|
для: 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(" ",$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 -параметра:
| |
|
|
|
|
|
|
|
для: wsnet
(05.01.2013 в 17:08)
| | Воспользуйтесь не $_GET-массивом, $_COOKIE, а функцию сохранения текущего состояния меню возложите на JavaScript. | |
|
|
|