thrieu / yii2-grid-view-state

将GridView的过滤器保存到会话中,保持页面间的过滤器状态。

v1.0 2017-10-19 05:27 UTC

This package is not auto-updated.

Last update: 2024-09-18 20:15:29 UTC


README

将GridView的过滤器保存到会话中,保持页面间的过滤器状态。

功能

  1. 非常灵活。设置和获取分开。
  2. 通过行为设置。
  3. 通过动作的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类,只需实现FilterStateInterfaceFilterStateTrait

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
            ]);
        }