Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: jstree
Форумы портала PHP.SU » » Вопросы новичков » jstree

Страниц (1): [1]
 

1. des1roer - 20 Мая, 2014 - 07:46:36 - перейти к сообщению
подскажите как работать с http://www[dot]jstree[dot]com/ необходимо нарисовать дерево. вида

главный раздел
1 раздел
1.2 раздел
2 раздел

выгребаю данные из таблицы вида

ид/ имя раздела / ид родителя
0 главный раздел
1 1 раздел 0
2 2 раздел 0
3 1.2 раздел 1
получаю данные из таблицы, создаю многомерный массив.
нужно его перегнать в json и отдать jstree. кто работал - подскажите как это сделать, желательно доступно
2. tato - 21 Мая, 2014 - 00:44:28 - перейти к сообщению
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.     // буфер
  3.     var categories = [];
  4.     // получаем json из атрибута data
  5.     var origCategories = $('treeContainer').data('categories');
  6.     // готовим со вкусом (=
  7.     for (var categoryId in origCategories) {
  8.         // берем категорию
  9.         var category = origCategories[categoryId];
  10.         // заполняем данные
  11.         category.text = category.name;
  12.         category.icon = category.status;
  13.         category.data = {
  14.             id: category.id,
  15.             originalId: category.id,
  16.             name: category.name,
  17.             status: category.status
  18.         };
  19.         // тут самое интересное
  20.         // если наша категория самая "верхняя", например у нее
  21.         // parent = 0, то мы должны поставить решетку
  22.         if (category.parent == 0) category.parent = '#';
  23.  
  24.         categories.push(category);
  25.     }
  26.  
  27.     $treeContainer.jstree({
  28.         core: { check_callback: true, multiple: false, data: categories },
  29.         plugins: ["dnd"]
  30.     });
  31.  


Нет необходимости самостоятельно выстраивать дерево на стороне php
jstree сделает это за нас. По-этому передаем одномерный массив.

CODE (html):
скопировать код в буфер обмена
  1.  
  2. <div data-categories="<?php echo json_encode($categories); ?>"></div>
  3.  
3. des1roer - 22 Мая, 2014 - 07:53:14 - перейти к сообщению
я как понимаю jstree довольна популярная библиотека и должно быть много людей работавших с ней. сейчас остановился на таком аспекте - как сделать чтобы при получении определенного ид (получаю гетом), выбирался узел дерева.
вот если на js писать


CODE (javascript):
скопировать код в буфер обмена
  1.       var data2 = [
  2.            { "id" : "1", "text" : "главная", "parent" : "#" },
  3.            { "id" : "2", "text" : "Услуги", "parent" : "#" },
  4.            { "id" : "3","text" : "Наши работы" , "parent" : "2" },
  5.            { "id" : "4", "text" : "Создание интернет магазина" , "parent" : "2", "state" : { "opened" : true,"selected":true }},
  6.           { "id" : "5", "text" : "Создание сайта", "parent" : "4" },
  7.         ];
  8.  


"state" : { "opened" : true,"selected":true } - открывает узел в дереве. но данные я получаю с базы (считай динамически), как записать внутрь массива еще и стэйт { "id" : "3","text" : "Наши работы" , "parent" : "2" }. как то добавить элемент надо, я не умею.
2 способ - наверное более простой и правильный
на пхп завожу массив


PHP:
скопировать код в буфер обмена
  1.     while ($row = pg_fetch_row($rs))
  2.                 {
  3.                    $Sum[] = array
  4.                    ("id" =>  $row[0],
  5.                    "text"  => $row[1],
  6.                    "parent" => $row[2]);
  7.                 }
  8.     $dataJ = json_encode ($Sum);



собственно можно проверить по полученному ид


PHP:
скопировать код в буфер обмена
  1.     if ($row[0] == $nrec)


и добавить что то вроде

PHP:
скопировать код в буфер обмена
  1.     "state" => '{ "selected":true }',


но таким образом json_encode ругается на "", в общем синтаксис ему не нравится. может их как то заэкранировать можно - не знаю
4. des1roer - 23 Мая, 2014 - 10:08:48 - перейти к сообщению
проблему решил http://des1roer[dot]blogspot[dot]ru/2014/05/jstree[dot]html

 

Powered by ExBB FM 1.0 RC1