1
0
Fork 0
mirror of https://github.com/Oreolek/yii2-nested-sets.git synced 2024-07-03 06:55:00 +03:00
yii2-nested-sets/README.md

152 lines
3 KiB
Markdown
Raw Normal View History

# Nested Sets Behavior for Yii 2
2013-05-05 19:19:56 +03:00
2015-01-01 13:59:38 +02:00
[![PayPal Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=WJYG53DVUAALL)
[![Build Status](https://img.shields.io/travis/creocoder/yii2-nested-sets/master.svg?style=flat-square)](https://travis-ci.org/creocoder/yii2-nested-sets)
[![Code Coverage](https://img.shields.io/scrutinizer/coverage/g/creocoder/yii2-nested-sets/master.svg?style=flat-square)](https://scrutinizer-ci.com/g/creocoder/yii2-nested-sets/?branch=master)
2015-01-01 10:04:23 +02:00
2015-01-02 09:52:27 +02:00
A modern nested sets behavior for the Yii framework utilizing the Modified Preorder Tree Traversal algorithm.
2013-05-06 10:12:45 +03:00
## Installation
2013-12-30 14:02:19 +02:00
The preferred way to install this extension is through [composer](http://getcomposer.org/download/).
Either run
2015-01-02 06:24:23 +02:00
```bash
2015-01-02 09:52:27 +02:00
$ php composer.phar require creocoder/yii2-nested-sets:dev-master
2013-12-30 14:02:19 +02:00
```
or add
2015-01-02 06:24:23 +02:00
```
"creocoder/yii2-nested-sets": "dev-master"
2013-12-30 14:02:19 +02:00
```
2015-01-01 13:59:38 +02:00
to the `require` section of your `composer.json` file.
2013-12-30 14:02:19 +02:00
## Configuring
2013-05-06 10:12:45 +03:00
First you need to configure model as follows:
```php
use creocoder\nestedsets\NestedSetsBehavior;
class Tree extends \yii\db\ActiveRecord
{
public function behaviors() {
return [
NestedSetsBehavior::className(),
];
}
public function transactions()
{
return [
self::SCENARIO_DEFAULT => self::OP_ALL,
];
}
public static function find()
{
return new TreeQuery(get_called_class());
}
2013-05-06 10:12:45 +03:00
}
```
Second you need to configure query model as follows:
2013-05-06 10:12:45 +03:00
```php
use creocoder\nestedsets\NestedSetsQueryBehavior;
2013-05-06 10:12:45 +03:00
class TreeQuery extends \yii\db\ActiveQuery
{
public function behaviors() {
return [
NestedSetsQueryBehavior::className(),
];
}
2013-05-06 10:57:43 +03:00
}
2013-05-06 10:12:45 +03:00
```
## Usage
2013-05-06 10:12:45 +03:00
2015-01-06 00:09:49 +02:00
### Quick Example
#### Making a root node
```php
$countries = new Menu(['name' => 'Countries']);
$countries->makeRoot();
```
#### Make a node as the last child of another node
```php
$australia = new Menu(['name' => 'Australia']);
$australia->appendTo($countries);
```
The tree will look like this
```
- Countries
- Australia
```
#### Make a node as the first child of another node
```php
$russia = new Menu(['name' => 'Russia']);
$russia->prependTo($countries);
```
The tree will look like this
```
- Countries
- Russia
- Australia
```
#### Append a node before another node
```php
$newZeeland = new Menu(['name' => 'New Zeeland']);
$newZeeland->insertBefore($australia);
```
The tree will look like this
```
- Countries
- Russia
- New Zeeland
- Australia
```
#### Append a node after another node
```php
$newZeeland = new Menu(['name' => 'New Zeeland']);
$newZeeland->insertBefore($australia);
```
The tree will look like this
```
- Countries
- Russia
- New Zeeland
- Australia
```
#### Append a node before another node
```php
$argentina = new Menu(['name' => 'Argentina']);
$argentina->insertAfter($australia);
```
The tree will look like this
```
- Countries
- Russia
- New Zeeland
- Australia
- Argentina
```