Страница 1 из 4

Работающий экстеншен NestedSet 2

Добавлено: 2014.10.31, 16:55
vismut
Вижу проблема популярная.
Пользоваться практически так же, как и старой версией.
https://github.com/Sammaye/NestedSetBehavior

UPDATE (01.01.2015):
creocoder писал(а):Полностью переосмысленная и совместимая с Yii 2 release версия: https://github.com/creocoder/yii2-nested-sets

Re: Работающий экстеншен NestedSet 2

Добавлено: 2014.10.31, 20:19
Faenir
Сегодня весь день провозился с экстеншном от creocoder, вроде заставил работать даже... и тут на тебе))

Re: Работающий экстеншен NestedSet 2

Добавлено: 2014.11.01, 13:53
zelenin
а работать с релизом, а не rc будет?

Re: Работающий экстеншен NestedSet 2

Добавлено: 2014.11.05, 11:21
vismut
zelenin писал(а):а работать с релизом, а не rc будет?
Да, конечно.
Там вобще мало что поменялось то.. между RC и релизом

Re: Работающий экстеншен NestedSet 2

Добавлено: 2014.11.05, 12:39
r3verser
Это есть вэри гуд.)

Re: Работающий экстеншен NestedSet 2

Добавлено: 2014.11.05, 13:58
vismut
Хотел сделать пулл реквест)
Но когда я правил код, я не думал с ним делиться, потому автоформатером кода весь код был переформатирован)
На пулл реквес автор ответил, что у него были табы, а у меня пробелы. И он не хочет щас проверять каждую строчку, проверять что я ничего не сломал)

Re: Работающий экстеншен NestedSet 2

Добавлено: 2014.11.05, 14:00
zelenin
vismut писал(а):Хотел сделать пулл реквест)
Но когда я правил код, я не думал с ним делиться, потому автоформатером кода весь код был переформатирован)
На пулл реквес автор ответил, что у него были табы, а у меня пробелы. И он не хочет щас проверять каждую строчку, проверять что я ничего не сломал)
все верно говорит.

Re: Работающий экстеншен NestedSet 2

Добавлено: 2014.11.06, 14:10
RGF
а как подключать?

Re: Работающий экстеншен NestedSet 2

Добавлено: 2014.11.06, 15:59
vismut
RGF писал(а):а как подключать?
Я надеюсь автор примет пулл реквест и можно будет установить компоузером.
Пока что можно по старинке, просто скопировать в проект)

пользоваться так же, как NestedSet из 1 версии.
https://github.com/yiiext/nested-set-behavior

Re: Работающий экстеншен NestedSet 2

Добавлено: 2014.11.06, 16:20
RGF
composer'ом установил: добавил в json
"sammaye/nestedsetbehavior": "*"

с этим в модели у меня не срастается:

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

    public function behaviors()
    {
        return array(
            'nestedSetBehavior'=>array(
                'class'=>'ext.yiiext.behaviors.model.trees.NestedSetBehavior',
                'leftAttribute'=>'lft',
                'rightAttribute'=>'rgt',
                'levelAttribute'=>'level',
            ),
        );
    } 

Re: Работающий экстеншен NestedSet 2

Добавлено: 2014.11.06, 16:26
zelenin
RGF писал(а):composer'ом установил: добавил в json
"sammaye/nestedsetbehavior": "*"

с этим в модели у меня не срастается:

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

    public function behaviors()
    {
        return array(
            'nestedSetBehavior'=>array(
                'class'=>'ext.yiiext.behaviors.model.trees.NestedSetBehavior',
                'leftAttribute'=>'lft',
                'rightAttribute'=>'rgt',
                'levelAttribute'=>'level',
            ),
        );
    }
"не срастается" - очень информативно.

Re: Работающий экстеншен NestedSet 2

Добавлено: 2014.11.06, 17:02
RGF
Class ext.yiiext.behaviors.model.trees.NestedSetBehavior does not exist

Re: Работающий экстеншен NestedSet 2

Добавлено: 2014.11.06, 17:06
zelenin
RGF писал(а):Class ext.yiiext.behaviors.model.trees.NestedSetBehavior does not exist
правильно, потому что такого класса нет, т.к. вы тупо скопировали из yii1.
Зачем вам какое-то расширение, если вы еще не понимаете как вообще работает yii2 и php?

Re: Работающий экстеншен NestedSet 2

Добавлено: 2014.11.06, 17:13
vismut
RGF писал(а):Class ext.yiiext.behaviors.model.trees.NestedSetBehavior does not exist
Чтоб удобно пользоваться данным расширением, сначала вам нужно:
1. изучить неймспейсы, понимать что и как
2. прочитать основные положения yii2 из официальной документации
3. В том поведении, которые вы установили компоузером - ПхпДок не исправлен и ваша ИДЕ не будет вам ничего подсазывать
4. У этого поведения есть небольшие отличия при получении данных, потому вам придется смотреть исходный код, для того чтоб понимать, что именно вам вернется.

В целом уии это не набор готовых решений и хелперов. Это очень мощная база для качественного приложения, но чтоб сделать что-то хорошее вам постоянно придется разбираться в исходном коде и читать документация прямо в коде.

Так-же советую изучить http://www.getinfo.ru/article610.html

Re: Работающий экстеншен NestedSet 2

Добавлено: 2014.11.06, 18:05
RGF
1 знаком
2 грешен, смотрел по диагонали
3 поставил руками
4 уже понял, что с документацией, в особенности с примерами все плохо, приходится залезать в код

подключил
use common\components\NestedSetBehavior\NestedSetBehavior;
.....................

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

    public function behaviors()
    {
        return [
            [
                'class' => NestedSetBehavior::className(),
                'leftAttribute' => 'lft',
                'rightAttribute' => 'rgt',
                'levelAttribute' => 'level',
                'hasManyRoots' => true
            ],
        ];
    } 
при добавлении дерево строится корректно, но при перемещении веток lft и rgt перемещаемой пересчитываются неверно:
передаю parent_id для указания родителя

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

if ($parent !== null) {
    $result = $model->moveAsFirst(tblPages::findOne($model->parent_id));
} 

Re: Работающий экстеншен NestedSet 2

Добавлено: 2014.11.07, 09:15
vismut
Тут я вижу что у вашей $model есть parent_id и вы перемещаете ноду $model в ноду $model->parent_id, в которой эта нода уже содержится.
Смысл не понятен мне..

Re: Работающий экстеншен NestedSet 2

Добавлено: 2014.11.07, 09:38
RGF
я указываю id нового родителя для данной $model
мне же нужен аргумент для $model->moveAsFirst
для этого и создал поле parent_id, это вариант мне показался наиболее простым

Re: Работающий экстеншен NestedSet 2

Добавлено: 2014.11.07, 13:56
vismut
В нестид сет нет понятия parent_id и оно там не нужно вовсе.

Так-же советую изучить http://www.getinfo.ru/article610.html

Re: Работающий экстеншен NestedSet 2

Добавлено: 2014.11.07, 14:23
RGF
/**
* Move node as first child of target.
* @param ActiveRecord|NestedSetBehavior $target the target.
* @return boolean whether the moving succeeds.
*/
public function moveAsFirst($target)

какая разница как назвать, parent_id или target
я подставляю id родителя moveAsFirst(tblPages::findOne(х))

Re: Работающий экстеншен NestedSet 2

Добавлено: 2014.11.07, 14:39
vismut
Проверил у себя, все работает.

Выложите тестовый пример.
Структура дерева до.
какую ноду в какую перемещаете
Структура дерева после.

Чтоб посмотреть что и как пересчиталось.