引子

小博,hisune.com开通了https了!现在通过http访问默认会自动跳转到https,瞬间有种高大上的感觉有木有?

下面步入今天的正题:

默认yii2的gridview或yii2-grid都是没有每页显示条数的参数配置的,们想要的只是一个简单的下拉框select,用来让用户选择自己的每页记录条数。下面是的解决办法。

解决办法

官方文档

1.先去官方文档http://www.yiiframework.com/doc-2.0/yii-grid-gridview.html看gridview的参数,发现了这个东西:http://www.yiiframework.com/doc-2.0/yii-grid-gridview.html#$filterSelector-detail

Additional jQuery selector for selecting filter input fields

选择过滤器的字段附加的jQuery选择器。

修改view

开始修改,先对view下手:

views/*/index.php

// \yii\web\Request用来获取当前分页的值,让前端选中。如果没有传,则读取$dataProvider中的分页配置,让前端选中。
$request = new \yii\web\Request;
echo Html::dropDownList(
    'per_page', 
    isset($request->get()['per_page']) ? $request->get()['per_page'] : $dataProvider->getPagination()->pageSize,  
    [10 => 10, 20 => 20, 50 => 50, 100 => 100]
);
// filterSelector加入后,改select的change将会被监听并将值传入后端。
// filterSelector还支持多个selector,例如:'filterSelector' => 'select[name="per_page"],input[name="xxx"]'
<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'filterSelector' => 'select[name="per_page"]', // 关键参数,The key!
    // ....
=?>

修改search model

model/search/*public search function

// 如果有传过滤参数per_page,则设置$dataProvider的Pagination
isset($params['per_page']) && $dataProvider->setPagination(['pageSize' => $params['per_page']]);

搞定,刷新你的页面看效果吧!It works!

如果您觉得您在我这里学到了新姿势,博主支持转载,姿势本身就是用来相互学习的。同时,本站文章如未注明均为 hisune 原创 请尊重劳动成果 转载请注明 转自: 为yii2的gridview或yii2-grid增加每页条数select下拉框 - hisune.com