paulzi / yii2-sortable
Yii2 的可排序行为
v1.0.3
2022-01-10 13:31 UTC
Requires
- php: >=5.4.0
- yiisoft/yii2: ~2.0.0
Requires (Dev)
- phpunit/dbunit: ~1.0
- phpunit/phpunit: ~4.0
This package is auto-updated.
Last update: 2024-09-10 19:09:26 UTC
README
它实现了控制 ActiveRecord 排序顺序的能力。
安装
通过 Composer 安装
composer require paulzi/yii2-sortable
或者将以下内容添加到你的 composer.json
文件的 require
部分。
"paulzi/yii2-sortable" : "^1.0"
require
迁移
在你的模型中添加一个签名整数列。为了快速操作行为,添加索引以用于范围字段和排序属性,例如
$this->createIndex('parent_sort', '{{%item}}', ['parent_id', 'sort']);
配置
use paulzi\sortable\SortableBehavior; class Sample extends \yii\db\ActiveRecord { public function behaviors() { return [ [ 'class' => SortableBehavior::className(), ], ]; } }
选项
$query = null
- 属性列表、回调或 ActiveQuery,用于查找范围元素。见下文。$sortAttribute = 'sort'
- 表架构中的排序属性。$step = 100
- 元素之间的间隙大小。$joinMode = true
- 未分配值的搜索方法。当 joinMode 为 true 时,使用与自身连接的表。否则,使用窗口搜索。窗口大小由 $windowSize 属性定义。$windowSize = 1000
- 当 joinMode 为 false 时,定义搜索窗口的大小。
$query
选项的详细信息:属性列表 - 一种简单的方式,通过具有相同内容字段的元素来限定范围,不需要别名。当使用 joinMode 时,您必须使用 tableName() 别名在 ActiveQuery 中。
例如,
public function behaviors() { return [ [ 'class' => SortableBehavior::className(), 'query' => ['parent_id'], ] ]; }
这等同于
public function behaviors() { return [ [ 'class' => SortableBehavior::className(), 'query' => function ($model) { $tableName = $model->tableName(); return $model->find()->andWhere(["{$tableName}.[[parent_id]]" => $model->parent_id]); }, ] ]; }
使用方法
获取排序属性值
$model = Sample::findOne(1); $position = $model->getSortablePosition();
移动到第一个项目
$model = new Sample(['parent_id' => 1]); $model->moveFirst()->save(); // inserting new node
移动到最后一个项目
$model = Sample::findOne(1); $model->moveLast()->save(); // move existing node
移动到指定位置的项目
$model = Sample::findOne(1); $model->moveTo(-33, true)->save(); // move to position -33, and move existing items forward $model = Sample::findOne(2); $model->moveTo(4, false)->save(); // move to position 4, and move existing items backward
将项目移动到另一个项目之前: 注意:如果您需要更改范围,请手动进行
$model1 = new Sample(['parent_id' => 1]); $model2 = Sample::findOne(2); $model1->moveBefore($model2)->save(); // move $model1 before $model2
将项目移动到另一个项目之后: 注意:如果您需要更改范围,请手动进行
$model1 = Sample::findOne(1); $model2 = Sample::findOne(2); $model1->parent_id = $model2->parent_id; $model1->moveAfter($model2)->save(); // move $model1 after $model2 with change scope
与相邻元素一起重新排序项目
$model = Sample::findOne(1); $model->reorder(true); // reorder with center zero $model = Sample::findOne(2); $model->reorder(false); // reorder from zero
SortableTrait
如果您需要,可以使用可选的 SortableTrait
(例如,您正在使用类似 ISortable
接口的东西)。