Nested Sets + CTreeView, CDropdownList, CListBox

Выкладываем свои наработки
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Nested Sets + CTreeView, CDropdownList, CListBox

Сообщение timlar »

А еще лучше обратить внимание на то, что это писалось исключительно для примера ;)
Twitter: @timlar_ua
Аватара пользователя
Svyatov
Сообщения: 459
Зарегистрирован: 2010.08.12, 14:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Nested Sets + CTreeView, CDropdownList, CListBox

Сообщение Svyatov »

SpiLLeR писал(а):Если проверять на ===, то перед этим все переменные нужно приводить ручками к нужному типу, т.к. пхп как хочет так и ставит тип.
Пример некорректного проставления типа пхп?
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Nested Sets + CTreeView, CDropdownList, CListBox

Сообщение slavcodev »

Svyatov писал(а):Пример некорректного проставления типа пхп?
CVarDumper::dump('123'===123); // выдаст false
Жду Yii 3!
Аватара пользователя
Svyatov
Сообщения: 459
Зарегистрирован: 2010.08.12, 14:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Nested Sets + CTreeView, CDropdownList, CListBox

Сообщение Svyatov »

mc-bear писал(а):
Svyatov писал(а):Пример некорректного проставления типа пхп?
CVarDumper::dump('123'===123); // выдаст false
И что тут некорректного? У строки и правда другой тип, нежели у числа :)

Если код пишется осознанно и продуманно, то сравнение с типом (===) только на пользу, ибо дает на ранних этапах выявить некоторые косяки. Лично в своей практике сравнение без типов я использую только для чисел, а для строк только с типом. Помогает избегать многих ошибок.
Аватара пользователя
pr_o
Сообщения: 65
Зарегистрирован: 2010.01.19, 02:20

Re: Nested Sets + CTreeView, CDropdownList, CListBox

Сообщение pr_o »

Лично я стараюсь писать "==", но часто косяки бывают при сравнении (true, false) (1, 0) и ("1","0")
SpiLLeR
Сообщения: 350
Зарегистрирован: 2009.09.17, 16:47
Откуда: Санкт-Петербург
Контактная информация:

Re: Nested Sets + CTreeView, CDropdownList, CListBox

Сообщение SpiLLeR »

http://test.loc/site/login?id=43
var_dump($_GET['id]) -> string(2)"42", логично что ручками потом сам приведешь в int'у. Хотя это правильное проставление типа. Я скорее не правильно выразился. Скорее разработчики косячат во время разработки на пхп.
Проблемы возникают с == и === когда работаешь над большими проектами. Кто-то возвращает true, false, кто-то 0,1 и т.д.
Предупрежден - значит вооружен.
devKP.ru
Аватара пользователя
pr_o
Сообщения: 65
Зарегистрирован: 2010.01.19, 02:20

Re: Nested Sets + CTreeView, CDropdownList, CListBox

Сообщение pr_o »

Отошли мы от темы)))

А есть еще какие-то решения насчет древовидной структуры данных? Неужели только Nested Sets???
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Nested Sets + CTreeView, CDropdownList, CListBox

Сообщение samdark »

Аватара пользователя
MOTORIST
Сообщения: 245
Зарегистрирован: 2010.06.24, 10:04

Re: Nested Sets + CTreeView, CDropdownList, CListBox

Сообщение MOTORIST »

В сознании новичка много возможностей, в сознании эксперта — лишь несколько.
zvnman
Сообщения: 7
Зарегистрирован: 2010.08.30, 20:30

Re: Nested Sets + CTreeView, CDropdownList, CListBox

Сообщение zvnman »

Как сделать управление ветками дерева CTreeView с использованием Ajax, типа:

root
-категория_1 add|edit|del|down
--категория_1.1 add|edit|del|down|up
--категория_1.2 add|edit|del|down|up
-категория_2 add|edit|del|down|up
--категория_2.1 add|edit|del|down|up
---категория_2.1.1 add|edit|del|down|up
---категория_2.1.2 add|edit|del|down|up
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Nested Sets + CTreeView, CDropdownList, CListBox

Сообщение timlar »

zvnman писал(а):Как сделать управление ветками дерева CTreeView с использованием Ajax, типа:

root
-категория_1 add|edit|del|down
--категория_1.1 add|edit|del|down|up
--категория_1.2 add|edit|del|down|up
-категория_2 add|edit|del|down|up
--категория_2.1 add|edit|del|down|up
---категория_2.1.1 add|edit|del|down|up
---категория_2.1.2 add|edit|del|down|up
Нужно писать js который будет все это обрабатывать. Я для себя писал, можно было удалять, добавлять, редактировать и перемещать узлы drug'n'drop-ом. Сейчас скрипта не осталось, поделиться не смогу. :( Но там ничего сложного.
Twitter: @timlar_ua
zvnman
Сообщения: 7
Зарегистрирован: 2010.08.30, 20:30

Re: Nested Sets + CTreeView, CDropdownList, CListBox

Сообщение zvnman »

Timlar писал(а): Нужно писать js который будет все это обрабатывать. Я для себя писал, можно было удалять, добавлять, редактировать и перемещать узлы drug'n'drop-ом. Сейчас скрипта не осталось, поделиться не смогу. :( Но там ничего сложного.
Спасибо за ответ!
Жаль что пока нет примера для реализации, я думаю что многим такой вариант управления деревом понравится.
Я не так давно начал юзать Yii и пока не могу освоить гибкость фреймворка с использованием JS.
Если сделаю доработку обязательно выложу код!
Аватара пользователя
MOTORIST
Сообщения: 245
Зарегистрирован: 2010.06.24, 10:04

Re: Nested Sets + CTreeView, CDropdownList, CListBox

Сообщение MOTORIST »

CTreeView
НЕ показывает активный пункт меню, ни класса ни id.
В сознании новичка много возможностей, в сознании эксперта — лишь несколько.
Аватара пользователя
metal
Сообщения: 12
Зарегистрирован: 2010.11.08, 05:48

Re: Nested Sets + CTreeView, CDropdownList, CListBox

Сообщение metal »

Код: Выделить всё

public function behaviors(){
    return array(
        'TreeBehavior' => array(
            'class' => 'application.extensions.nestedset.TreeBehavior',
            '_idCol' => 'id',
            '_lftCol' => 'lft',
            '_rgtCol' => 'rgt',
            '_lvlCol' => 'level',
        ),
        'TreeViewTreebehavior' => array(
            'class' => 'application.extensions.nestedset.TreeViewTreebehavior',
        )
    );
} 
Когда прописываешь поля (id, lft, rgt, level) работает нормально, но если у этих полей другие имена (category_id, category_lft и т.д.) и прописываешь их соответственно с эту функцию, запросы к БД все равно идут по полям id, lft и т.д. Возможно ли это обойти настройками, или необходимо переписывать расширение?
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Nested Sets + CTreeView, CDropdownList, CListBox

Сообщение timlar »

Я бы рекомендовал использовать вот это расширение: http://code.google.com/p/yiiext/source/ ... del/trees/. Сам с ним работаю, намного удобнее чем то, о котором говорится в данной теме.
Twitter: @timlar_ua
SpiLLeR
Сообщения: 350
Зарегистрирован: 2009.09.17, 16:47
Откуда: Санкт-Петербург
Контактная информация:

Re: Nested Sets + CTreeView, CDropdownList, CListBox

Сообщение SpiLLeR »

Не нашел по данному расширению темы, поэтому пишу сюда.
При moveAsLast и видимо других подобных действиях не вызывается afterSave(); Это сделано специально, если да, то почему?
Предупрежден - значит вооружен.
devKP.ru
Аватара пользователя
creocoder
Сообщения: 138
Зарегистрирован: 2010.01.24, 05:29
Откуда: Тамбов

Re: Nested Sets + CTreeView, CDropdownList, CListBox

Сообщение creocoder »

Да, это сделано специально. Операция переноса не вызывает событие afterSave(). В будующем планируется, что библиотека будет расширять стандартные AR события своими. Для этого метода это будет afterMove().
webgold
Сообщения: 8
Зарегистрирован: 2011.04.28, 15:32

Re: Nested Sets + CTreeView, CDropdownList, CListBox

Сообщение webgold »

Сделал все как в посте, в самом начале темы, выскакивает ошибка include(CNestedSetBehavior.php): failed to open stream: No such file or directory. В чем может быть причина?

Код: Выделить всё

/home/artem/mysite/motor.l/public/framework/YiiBase.php(396)

384      * @return boolean whether the class has been loaded successfully
385      */
386     public static function autoload($className)
387     {
388         // use include so that the error PHP file may appear
389         if(isset(self::$_coreClasses[$className]))
390             include(YII_PATH.self::$_coreClasses[$className]);
391         else if(isset(self::$classMap[$className]))
392             include(self::$classMap[$className]);
393         else
394         {
395             if(strpos($className,'\\')===false)
396                 include($className.'.php');
397             else  // class name with namespace in PHP 5.3
398             {
399                 $namespace=str_replace('\\','.',ltrim($className,'\\'));
400                 if(($path=self::getPathOfAlias($namespace))!==false)
401                     include($path.'.php');
402                 else
403                     return false;
404             }
405             return class_exists($className,false) || interface_exists($className,false);
406         }
407         return true;
408     } 
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Nested Sets + CTreeView, CDropdownList, CListBox

Сообщение timlar »

Twitter: @timlar_ua
zvnman
Сообщения: 7
Зарегистрирован: 2010.08.30, 20:30

Re: Nested Sets + CTreeView, CDropdownList, CListBox

Сообщение zvnman »

Timlar писал(а):Я бы рекомендовал использовать вот это расширение: http://code.google.com/p/yiiext/source/ ... del/trees/. Сам с ним работаю, намного удобнее чем то, о котором говорится в данной теме.
А как используя данный класс вывести дерево в CtreeView?
Ответить