Наверняка каждый видел в своей жизни дерево - не то, что растет на улице, а такое как в проводнике винды, скажем. Захотелось мне сделать такое же на пхп.
Суть в том, чтобы по щелчку на каком-то слове дерева делался запрос в БД на сервер и приходили данные, которые станут дочерними узлами уже загруженного дерева. Но сделать это надо так, чтобы не пересоставлять каждый раз дерево заново. Например:
ааа
|---bbb
|---ccc
|---fff
|---ggg
Пользователь щелкает на bbb и после запроса к БД получает такое (ddd и eee - взяты из БД)
ааа
|---bbb
|---ddd
|---eee
|---ccc
|---fff
|---ggg
Проблема в том, как сделать такое, на перезагружая дерево после расскрытия какого-то узла?
Спустя 58 минут, 4 секунды (6.07.2006 - 12:45) vasa_c написал(а):
Если нужно, чтобы что-то делалось в браузере и без перезагрузки, то здесь нужно задействовать клиентские языки, а не серверные. Т.е. не php, а, например, javascript.<br>Это можно сделать примерно так (несколько коряво и в FF глючит, но смысл понятен):<br>
перенес в javascript...
<ul id="ulMenu"> <li id="topLi"> <a href="aaa">aaa</a> <ul> <li><a href="bbb">bbb</a> <ul> <li><a href="ddd">ddd</a></li> <li><a href="eee">eee</a></li> </ul> </li> <li><a href="ccc">ccc</a></li> <ul> <li><a href="fff">fff</a></li> </ul> <li><a href="ggg">ggg</a></li> </ul> </li> </ul> <script type="text/javascript"> /* Обработчик щелчка по ссылке */ function clkA( a ) { /* Получить вложенный UL */ var ul = a.parentNode.getElementsByTagName( "ul" ); if ( ul.length == 0 ) return true; /* Вложенных списков нет — браузер идет по ссылке */ ul = ul.item( 0 ); /* Изменение видимости */ ul.style.display = ( ul.style.display == "none" ) ? "block" : "none"; return false; /* Отмена перехода по ссылке */ } // clkA. /* Навешивание обработчиков на ссылки и первоначальное скрытие пунктов */ var listA = document.getElementById( "ulMenu" ).getElementsByTagName( "A" ); for ( var i = 0; i < listA.length; i++ ) { ( function( a ) { a.onclick = function(e) { return clkA( a ); } clkA( a ); }( listA.item( i ) ) ); } </script>
перенес в javascript...
Спустя 1 час, 3 минуты, 13 секунд (6.07.2006 - 13:48) DrewBlin написал(а):
Но получается, что ddd и eee я должен отправить клиенту сразу и только отобразить их по щелчку.
Но дело в том, что у каждого узла может быть много десятков дочерних узлов. И слать это все сразу (а клиент необязательно захочет увидеть все) слишком накладно и долго.
Может есть другой способ?
Но дело в том, что у каждого узла может быть много десятков дочерних узлов. И слать это все сразу (а клиент необязательно захочет увидеть все) слишком накладно и долго.
Может есть другой способ?
Спустя 21 минута, 15 секунд (6.07.2006 - 14:09) vasa_c написал(а):
QUOTE
у каждого узла может быть много десятков дочерних узлов
Несколько десятков это не слишком и много, можно и загрузить сразу и скрыть от клиента, а по щелчку показывать.
Если интересует именно обмен браузера данными с сервером без перезагрузки страницы, то учи ajax. Пара вводных статей:
http://webmascon.com/topics/technologies/13a.asp
http://dklab.ru/lib/Subsys_JsHttpRequest/
Спустя 6 часов, 53 минуты, 39 секунд (6.07.2006 - 21:03) дмитрий написал(а):
AJAX 100%:D