[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Иерархическое (дерево) представление данных
DrewBlin
Всем привет!!!
Наверняка каждый видел в своей жизни дерево - не то, что растет на улице, а такое как в проводнике винды, скажем. Захотелось мне сделать такое же на пхп.
Суть в том, чтобы по щелчку на каком-то слове дерева делался запрос в БД на сервер и приходили данные, которые станут дочерними узлами уже загруженного дерева. Но сделать это надо так, чтобы не пересоставлять каждый раз дерево заново. Например:
ааа
|---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>
 
<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
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.