yii nestedsetbehavior Настроить и использовать = yii nested sets, пример использования behavior (поведения)
Primary tabs
Страничка данного расширения nestedsetbehavior располагается здесь
Я же частично переводу информацию по настройке данного расширения и приведу здесь пару примеров.
Основные методы и функции перечислены здесь
Поехали)
Качаем и забрасываем
Для начала качаем само расширение - как и написано на странице (http://www.yiiframework.com/extension/ne...) самый свежачок располагается на гитхаб-хостинге расширения(https://github.com/yiiext/nested-set-beh...) качаем оттуда NestedSetBehavior.php (ну или копипастим исходный код)
кидаем это файл в папку protected/components/ при этом должна быть настроена автоматическая подгрузка компонентов из данной папки.
Настройка
Всякая модель, элементы которой должны быть выстроены в некую иерархию посредством NestedSets должна объявить следующий метод "поведения", такого вида:
public function behaviors() { return array( 'NestedSetBehavior'=>array( // перепишем путь как будто файл расширения лежит в protected/components 'class'=>'application.components.NestedSetBehavior', // путь в стиле "yii псевдонимов" 'leftAttribute'=>'lft', 'rightAttribute'=>'rgt', 'levelAttribute'=>'level', ); }
где
'leftAttribute'=>'lft', 'rightAttribute'=>'rgt', 'levelAttribute'=>'level',
указывают на имена столбцом для соответствующих индексов (левого, правого ключа и номера "глубины" - уровня иерархии) - поля с данными именами должны присутствовать в таблице модели.
В частности - по умолчанию предлагается использовать такие схемы (пример для некоторой сущности "категория") -
для хранения многих деревьев в одной таблице:
CREATE TABLE `category` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `root` INT(10) UNSIGNED DEFAULT NULL, `lft` INT(10) UNSIGNED NOT NULL, `rgt` INT(10) UNSIGNED NOT NULL, `level` SMALLINT(5) UNSIGNED NOT NULL, PRIMARY KEY (`id`), KEY `root` (`root`), KEY `lft` (`lft`), KEY `rgt` (`rgt`), KEY `level` (`level`) );
а для хранения одного дерева в одной таблице:
CREATE TABLE `category` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `lft` INT(10) UNSIGNED NOT NULL, `rgt` INT(10) UNSIGNED NOT NULL, `level` SMALLINT(5) UNSIGNED NOT NULL, PRIMARY KEY (`id`), KEY `lft` (`lft`), KEY `rgt` (`rgt`), KEY `level` (`level`) );
Чтобы расширение "понимало" с одним или многими деревьями мы собираемся работать следует использовать параметр конфигурации hasManyRoots, который по умолчанию = false
Основные методы и функции перечислены здесь
- Log in to post comments
- 10114 reads