如何在cookie中转移排序参数?

时间:2017-07-17 04:50:16

标签: yii2

在控制器中我有一个包含排序参数的变量。在视图中我有一个完美排序的gridview,甚至当我重新加载页面时,已排序的列保持排序。但是我也有一些过滤器和提交按钮用于从db扩展我的选择,当我按下这个按钮时,排序列重置为默认值。我想保留它并尝试使用cookie,但它没有帮助。

if ($List->sort->attributes)
        {
            Yii::$app->response->cookies->add(new \yii\web\Cookie([
                'name' => 'sort',
                'value' => $List->sort->attributes,
            ]));
        }

无论如何提交后,所选列重置。如何解决?

1 个答案:

答案 0 :(得分:0)

默认情况下,GridView从url获取排序参数,例如MALLOC_PERTURB_,这意味着?sort=-statusdesc排序。从您的问题如下所示您的视图中有一些表格应该执行一些额外的数据过滤,如下所示:

status

如果是这样,那么您只需要在表单操作的url中保留排序参数,例如

<form method="POST">
    <input type="text" name="filter">
    <button type="submit" name="action" value="search">Search</button>
</form>

或者如果您使用ActiveForm:

<form method="POST" action="<?= \Yii::$app->request->getUrl() ?>">

如果您想使用cookie,那么您应该在您的控制器中手动获取排序属性,并将它们应用于您传递给dataProvider(或$form = ActiveForm::begin([ 'method' => 'POST', 'action' => \Yii::$app->request->getUrl(), ]); 配置)的查询。

请注意,这是在GridView中添加过滤的另一种常用方法 - sorter 属性。

表格documentation

  

保留用户输入的过滤数据的模型。当这个属性   设置后,网格视图将启用基于列的过滤。每个数据   默认情况下,列会在顶部显示用户可以使用的文本字段   填写以过滤数据。

     

请注意,为了显示用于过滤的输入字段,列必须   有它的yii \ grid \ DataColumn :: $属性设置和   属性应该在$ filterModel或当前场景中处于活动状态   将yii \ grid \ DataColumn :: $ filter设置为输入的HTML代码   字段。

     

如果未设置此属性(null),则过滤功能为   禁用。