New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
help #1
Comments
Здравствуйте. К сожалению документации нет. Возможно позже добавлю. В целом использование аналогично другим подобным расширениям. Например этому http://www.yiiframework.com/extension/nestedsetbehavior/ Данное поведение нужно добавить в описание модели Так же в базе необходимо добавить поля и и индексы для этих полей
После этого для данной модели становятся доступны методы данного поведения, как-то так: $model = new SomeModel(); |
Подробнее о данном методе хранения можно почитать в этой серии постов http://habrahabr.ru/post/46659/ http://habrahabr.ru/post/47280/ |
Да вот как раз посоветовали разбираться на основе НС, но все же не могу понять, как у вас тут устроенно добавление дочернего элемента к родителю.
По нестеду как то вот так, но что оно ругает "Имя столбца должно быть строкой или массивом." |
Не могу придумать где может возникать такая ошибка. Возможно у вас не проходит валидация. Если возможно приведите полный trace path. И схему базы, в которой хранится дерево. У меня все работает в таком виде: |
Модель, валидации нет. Модель полностью голая за исключением behaviors Контроллер тестовый:
Честно говоря вообще не понятно что мы делаете с f f2, какой вообще атрибут добавляет новый path в структуру ? Я честно сам бы даже написал документацию и отправил Вам, если бы только понять как это работает. Имя столбца должно быть строкой или массивом. Я пытаюсь к руту добавить дочерний элемент как на хабре. Рут: 1 Таблица: |
В посте на хабре в поле path прописываются абстрактные цифры (1.1.1). В данном варианте в path добавляются через точку идентификаторы родительских элементов. За сортировку отвечает параметр position. Параметр level введен для облегчения и ускорения выборки элементов одинакового уровня. За правильную сортировку отвечает метод setPosition(), за само перемещение move(). Элемент у которого level = 0, path = '.' считается корневым. level =1, path = '.1.' - это ребенок корневого элемента с идентификатором 1. |
тоесть Ваш скрипт не добавляет именно запись с path, тут весь вопрос именно в этом =) |
Добавляет. Вот этот кусок кода из метода move() if ($target && $target->primaryKey) {
if ($target->{$this->levelField} == $this->maxLevel) {
$target = $target->parent;
}
$model->{$this->levelField} = $target->{$this->levelField} + 1;
$model->{$this->pathField} = $target->{$this->pathField} . $target->primaryKey . $this->pathSeparator;
$this->{$this->positionFiled} = count($target->children) + 1;
$target->addChild($model);
} else {
$model->{$this->levelField} = 0;
$model->{$this->pathField} = $this->pathSeparator;
$rootsCount = $model->countByAttributes(array(
$this->pathField => $this->pathSeparator
));
$model->{$this->positionFiled} = $rootsCount ? $rootsCount + ($new ? 0 : 1) : 0;
} |
Все понятно в чем проблема, обязательное условие это наличие ПК в таблице. Но от сюда последний вопрос:
Создается 400 пользователь и его путь: .1.234. Тоесть у нас крепиться ПК таблицы к path. Однако далее пути будут крайне великоватые если брать user_id за pk. Это получается нужно обязательно еще 1 колонку с автоинкрементом ? И там если что я разберусь, я могу Вам написать документацию не большую ? Вещь стоящая если разобраться. |
Использовал в базе с ~ 300 тыс элементов. Размера поля path для этого хватало. Данное ограничение задается параметром $maxLevel - по сути это <размер поля path>/<размер id отдельного элемента>. На счет документации: да конечно, буду благодарен ) |
А вы использовали данный скрипт на практике ? тут походу не правильно пересчитывается лвл или вообще не пересчитывается при перетаскивании веток с 1 в другую. + иногда всплывала бесконечная рекурсия при перемещении веток |
Конкретно этот не использовал, могут быть и баги. Использовал аналогичный для kohana 2.4. |
в общем где-то тут случайно как то вышло, что при смене веток вгоняется бесконечная рекурсия. Собственно из-за этого пришлось отказаться от текущей реализации |
Здравствуйте, я нашел ваш скрип и хотел проверить его в действии. Однако так и не смог разобраться как с ним работать.
Есть ли к нему какия-либо документация ?
The text was updated successfully, but these errors were encountered: