demi / sort
为排序模型提供 Yii2 行为
1.0.1
2017-04-09 13:03 UTC
Requires
- php: >=5.4.0
- yiisoft/yii2: *
This package is auto-updated.
Last update: 2024-08-27 22:11:07 UTC
README
为模型排序提供 Yii2 行为
安装
运行
composer require "demi/sort" "~1.0"
配置
在模型文件中添加排序行为
public function behaviors() { return [ // ... 'sortBehavior' => [ 'class' => 'demi\sort\SortBehavior', 'sortConfig' => [ 'sortAttribute' => 'sort', 'condition' => function ($query, $model) { /* @var $query \yii\db\Query */ /* @var $model self */ $query->andWhere(['category_id' => $model->category_id]); }, ], ], ]; }
用法
在 GridView 中
<?= GridView::widget([ // ... 'columns' => [ // ... [ 'class' => 'demi\sort\SortColumn', 'action' => 'change-sort', // optional ], ], ]); ?>
别忘了设置默认排序!通常为 CategorySearch::search()
$dataProvider = new ActiveDataProvider([ 'query' => $query, 'sort' => ['defaultOrder' => ['sort' => SORT_ASC]], ]);
在视图文件中
$canSortDown = $model->canSort(SORT_DESC); $canSortUp = $model->canSort(SORT_ASC); if ($canSortDown) { echo Html::a('Down', ['change-sort', 'id' => $model->id, 'direction' => SORT_DESC]); } if ($canSortUp) { echo Html::a('Up', ['change-sort', 'id' => $model->id, 'direction' => SORT_ASC]); }
在控制器/模型文件中
// sort model down $model->changeSorting(SORT_DESC); // sort model up $model->changeSorting(SORT_DESC);
附加功能:排序动作
将以下代码添加到您的控制器中
public function actions() { return [ 'change-sort' => [ 'class' => 'demi\sort\SortAction', 'modelClass' => \common\models\Category::className(), // optionaly 'afterChange' => function ($model) { if (!Yii::$app->request->isAjax) { return Yii::$app->response->redirect(Url::to(['update', 'id' => $model->category_id])); } else { return Yii::$app->controller->renderPartial('index', ['model' => $model]); } }, // or 'redirectUrl' => ['index'], // or 'redirectUrl' => function ($model) { return ['update', 'id' => $model->id]; }, 'canSort' => Yii::$app->user->can('admin'), // or 'canSort' => function ($model) { return Yii::$app->user->id == $model->user_id; }, ], ]; }