PHP code example of serj / sortable-tree
1. Go to this page and download the library: Download serj/sortable-tree library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
serj / sortable-tree example snippets
Tree::addItem();
Tree::addItem(1);
$parent = 1;
$target = 2;
$position = 'before';
Tree::addItem($parent, $target, $position);
$parent = 1; // we move items under the same parent
$id = 3 // move this item
$target = 2; // we want to locate the item after this one
$position = 'after';
Tree::moveTo($id, $parent, $target, $position)
$parent = 2;
$id = 3
$position = 'after';
Tree::moveTo($id, $parent)
Tree::deleteRecursive(2);
class m171217_033811_sortable_tree_tables extends Migration
{
/**
* @inheritdoc
*/
public function safeUp()
{
$this->createTable('{{%tree_data}}', [
'id' => $this->primaryKey(),
'parent_id' => $this->integer(),
'level' => $this->integer(),
'sort' => $this->integer(),
'title' => $this->string(),
'deleted' => $this->boolean()->defaultValue(false),
'created_at' => $this->timestamp()->defaultValue('NOW()'),
'updated_at' => $this->timestamp()->defaultValue('NOW()'),
'deleted_at' => $this->timestamp(),
]);
$this->createTable('{{%tree_structure}}', [
'id' => $this->primaryKey(),
'parent' => $this->integer(),
'child' => $this->integer()
]);
}
/**
* @inheritdoc
*/
public function safeDown()
{
$this->dropTable('{{%tree_data}}');
$this->dropTable('{{%tree_structure}}');
}
}
use yii\db\Expression;
class TreeExtended extends \serj\sortableTree\Tree
{
/**
* @inheritdoc
*/
public static function instantiate($row)
{
$model = new self();
$model->setFilter(new Filter());
return $model;
}
/**
* @inheritdoc
*/
public function rules()
{
return array_merge(
parent::rules(),
[
['title', 'string'],
['deleted', 'boolean'],
[['created_at', 'updated_at', 'deleted_at'], 'safe']
]
);
}
/**
* @param int $id
* @return null|RecordTreeData|\yii\db\ActiveRecord
* @throws NotFoundHttpException
*/
public function editTitle(int $id, $title)
{
$model = self::getRecord($id);
$model->setAttributes([
'title' => $title,
'updated_at' => new Expression('NOW()')
]);
if ($model->save()) {
$model->refresh();
return $model;
}
return $model;
}
/**
* @param array $ids
* @return int
* @throws \yii\db\Exception
*/
protected static function deleteItems(array $ids) {
return \Yii::$app->db->createCommand()
->update(
self::tableName(),
['deleted' => true, 'deleted_at' => new Expression('NOW()')],
['id' => $ids]
)
->execute();
}
}
use yii\db\Query;
class Filter implements \serj\sortableTree\FilterInterface
{
/**
* @inheritdoc
*/
public function applyFilter(Query $query)
{
$query->andWhere([
'deleted' => false
]);
return $query;
}
}
TreeExtended::addItem(0, null, null , ['title' => 'Root']);
TreeExtended::editTitle(1, 'Root modified');
Tree::deleteRecursive(1);
const EVENT_AFTER_ADD = 'tree.after_add';
const EVENT_BEFORE_MOVE = 'tree.before_move';
const EVENT_AFTER_MOVE = 'tree.after_move';
const EVENT_BEFORE_DELETE = 'tree.before_delete';
const EVENT_AFTER_DELETE = 'tree.after_delete';
const EVENT_BEFORE_TREE_QUERY = 'tree.before_tree_query';
\Yii::$app->on(Tree::EVENT_BEFORE_DELETE, function (\serj\sortableTree\EventTree $event) {
print_r($event->senderData['ids']);
});
Tree::setSortManager(
new Sortable([
'targetTable' => Tree::tableName(),
'pkColumn' => 'id',
'srtColumn' => 'sort',
'grpColumn' => 'parent_id',
'databaseDriver' => Sortable::DB_DRIVER_MYSQL
])
);