thrieu / yii2-grid-view-state
将GridView的过滤器保存到会话中,保持页面间的过滤器状态。
v1.0
2017-10-19 05:27 UTC
Requires
- yiisoft/yii2: *
This package is not auto-updated.
Last update: 2024-09-18 20:15:29 UTC
README
将GridView的过滤器保存到会话中,保持页面间的过滤器状态。
功能
- 非常灵活。设置和获取分开。
- 通过行为设置。
- 通过动作的route和可定制的ID确定唯一性。
安装
要安装,请运行
php composer.phar require --prefer-dist thrieu/yii2-grid-view-state "dev-master"
或者将以下内容添加到你的composer.json
文件的require部分,然后运行composer update
。
"thrieu/yii2-grid-view-state": "dev-master"
用法
步骤 1
创建 \app\widgets\Gridview.php
扩展GridView
类,只需实现FilterStateInterface
和FilterStateTrait
。
namespace \app\widgets; use thrieu\grid\FilterStateInterface; use thrieu\grid\FilterStateTrait; class GridView extends \yii\grid\GridView implements FilterStateInterface { use FilterStateTrait; }
步骤 2
将过滤器行为附加到你的GridView
小部件。
use \app\widgets\Gridview; ... GridView::widget([ ... 'as filterBehavior' => \thrieu\grid\FilterStateBehavior::className(), ... ]);
步骤 3
更新 \app\models\xxxSearch.php
获取与GridView状态参数和GET查询参数合并的参数,然后将它设置到过滤器模型和DataProvider
。
// DataProvider $dataProvider = new ActiveDataProvider([ 'query' => $query, 'pagination' => [ 'params' => \app\widgets\GridView::getMergedFilterStateParams(), ], 'sort' => [ 'params' => \app\widgets\GridView::getMergedFilterStateParams(), ], ]); // Filter model $this->load(\app\widgets\GridView::getMergedFilterStateParams());
享受它。
清除状态
更新 \app\controllers\xxxController.php
将ClearFilterStateBehavior
添加到控制器中的behaviors()
。
public function behaviors() { return [ ... 'clearFilterState' => \thrieu\grid\ClearFilterStateBehavior::className(), ... ]; }
然后在你的前端页面添加一个表单。
$form = Html::beginForm(); $form .= Html::hiddenInput('clear-state', '1'); $form .= Html::hiddenInput('redirect-to', ''); $form .= Button::widget([ 'label' => Yii::t('app', 'Reset filter'), ]); $form .= Html::endForm(); echo $form;
通过路由获取过滤器设置
$filterData = GridView::getMergedFilterStateParams(null, null, 'delivery/cmd-delivery/index'); $model->load($filterData);
视图屏幕的前一个和下一个模型
对于gridview,设置usepreview = true
use \app\widgets\Gridview; ... GridView::widget([ ... 'as filterBehavior' => \thrieu\grid\FilterStateBehavior::class, 'usePrevNext' => true, ... ]);
对于前一个和下一个按钮,轻松获取前一个和下一个模型的关键和值
$prevNext = new PrevNextPage('cars/in-way/index'); if ($prevId = $prevNext->getPrevPage($model->id)) { echo ThButton::widget([ 'tooltip' => Yii::t('blankonthema', 'Previous record'), 'link' => [ 'view', 'id' => $prevId, ], 'icon' => 'arrow-left', 'type' => ThButton::TYPE_DEFAULT ]); } if ($nextId = $prevNext->getNextPage($this->id)) { echo ThButton::widget([ 'tooltip' => Yii::t('blankonthema', 'Next record'), 'link' => [ 'view', 'id' => $nextId, ], 'icon' => 'arrow-right', 'type' => ThButton::TYPE_DEFAULT ]); }