如何在 yii2 中动态显示 pageSize?
How do I Dynamically show the pageSize in yii2?
目前我已经在搜索功能中设置了静态页面大小,但现在我需要为用户创建下拉菜单以从前端更改页面大小。例如 10,20,50,100.
我得到了代码,但它适用于 yii 以前的版本。
如果我必须这样做,我将使用以下方法。
- 为页面大小创建一个下拉列表,如果你想在
summary
文本和 items
列表之间或添加它,你可以在 gridview 的 layout
选项中调整下拉列表在网格视图之前。像这张图片,你可以用div包裹起来,自己调整CSS。
主要要做的是将下拉列表的id
包含到filterSelector
选项中,这样每次过滤gridview时也会提交下拉值,而且每当你更改下拉菜单。
您的 GridView 将如下所示
GridView::widget([
'dataProvider' => $dataProvider,
'layout'=>'{summary}'.Html::activeDropDownList($searchModel, 'myPageSize', [1 => 10, 2 => 20, 50 => 50, 100 => 100],['id'=>'myPageSize'])."{items}<br/>{pager}",
'filterModel' => $searchModel,
'filterSelector' => '#myPageSize',
'columns'=>[
// your column configurations.......
]
]);
在 searchModel
中声明一个 public 属性
public $myPageSize
将 属性 添加到 searchModel
中的 safe
规则
[['myPageSize'],'safe']
然后更新您正在与 GridView
一起使用的相对 SearchModel
中的 search()
方法。您应该在 $dataProvider
中分配 query
的 pageSize
选项并定义新的 属性,但请确保在 $this->load($params)
语句之后添加此行。
见下文
$dataProvider->pagination->pageSize = ($this->myPageSize !== NULL) ? $this->myPageSize : 10;`
这里我们将默认页面大小设置为我们创建的下拉列表中的最小选项,否则它会在您更改下拉列表时更新。
现在尝试更改下拉菜单,您会看到它起作用了。希望这有帮助
谢谢穆罕默德!
您的回答对我有帮助,但在布局上我不得不修改 select 的数组:
在“1 => 10、2 => 20”的地方,我不得不将其更改为“10 => 10、20 => 20”。否则它会一个接一个或两个接两个分页。
结果是这样的:
'layout'=>'{summary}'.Html::activeDropDownList($searchModel, 'myPageSize', [10 => 10, 20 => 20, 50 => 50, 100 => 100],['id'=>'myPageSize'])."{items}<br/>{pager}",
其余的工作完美!
目前我已经在搜索功能中设置了静态页面大小,但现在我需要为用户创建下拉菜单以从前端更改页面大小。例如 10,20,50,100.
我得到了代码,但它适用于 yii 以前的版本。
如果我必须这样做,我将使用以下方法。
- 为页面大小创建一个下拉列表,如果你想在
summary
文本和items
列表之间或添加它,你可以在 gridview 的layout
选项中调整下拉列表在网格视图之前。像这张图片,你可以用div包裹起来,自己调整CSS。
主要要做的是将下拉列表的id
包含到filterSelector
选项中,这样每次过滤gridview时也会提交下拉值,而且每当你更改下拉菜单。
您的 GridView 将如下所示
GridView::widget([
'dataProvider' => $dataProvider,
'layout'=>'{summary}'.Html::activeDropDownList($searchModel, 'myPageSize', [1 => 10, 2 => 20, 50 => 50, 100 => 100],['id'=>'myPageSize'])."{items}<br/>{pager}",
'filterModel' => $searchModel,
'filterSelector' => '#myPageSize',
'columns'=>[
// your column configurations.......
]
]);
在 searchModel
中声明一个 public 属性public $myPageSize
将 属性 添加到
中的searchModel
safe
规则[['myPageSize'],'safe']
然后更新您正在与
GridView
一起使用的相对SearchModel
中的search()
方法。您应该在$dataProvider
中分配query
的pageSize
选项并定义新的 属性,但请确保在$this->load($params)
语句之后添加此行。见下文
$dataProvider->pagination->pageSize = ($this->myPageSize !== NULL) ? $this->myPageSize : 10;`
这里我们将默认页面大小设置为我们创建的下拉列表中的最小选项,否则它会在您更改下拉列表时更新。
现在尝试更改下拉菜单,您会看到它起作用了。希望这有帮助
谢谢穆罕默德! 您的回答对我有帮助,但在布局上我不得不修改 select 的数组: 在“1 => 10、2 => 20”的地方,我不得不将其更改为“10 => 10、20 => 20”。否则它会一个接一个或两个接两个分页。
结果是这样的:
'layout'=>'{summary}'.Html::activeDropDownList($searchModel, 'myPageSize', [10 => 10, 20 => 20, 50 => 50, 100 => 100],['id'=>'myPageSize'])."{items}<br/>{pager}",
其余的工作完美!