Revision #208 has been created by rackycz on Jul 3, 2020, 12:46:05 PM with the memo:
GridViev - Variable page size
« previous (#207) next (#209) »
Changes
Title
unchanged
Yii v2 snippet guide
Category
unchanged
Tutorials
Yii version
unchanged
2.0
Tags
unchanged
tutorial,beginner,yii2
Content
changed
[...]
GridView cannot display DropDownList which could be used by the user to change the number of rows per page. You have to add it manually like this:
When you are creating a new model using Gii, you can select if you want to create the SearchModel as well. Do it, it is usefull for example in this situation. Then add following rows to the model:
```php
// file models/InvoiceSearch.php
use yii\helpers\Html; // add this row
class InvoiceSearch extends Invoice[...]
// ...
// aAdd
followingthis function
s:
public function getPageSizeDropDown($htmlOptions = [], $prefixHtml = '', $suffixHtml = '', $labelPrefix = '') {
return $prefixHtml . Html::activeDropDownList($this, 'pageSize',[...]
}
// Add this function:
public function getPageSizeDropDownID($prefix = '#') {
return $prefix . Html::getInputId($this, 'pageSize');
}
// This function already exists, so change it:
public function search($params)
{
// ..
$this->load($params);
// Add following rows:
if (!isset($this->pageSize)) {
// Here we make sure that the dropDownLst will have correct value preselected
$this->pageSize = $dataProvider->pagination->defaultPageSize;
}
$dataProvider->pagination->pageSize = (int)$this->pageSize;
```
And then in your views/xxx/index.php use following:[...]
'filterModel' => $searchModel,
'layout'=>'{summary}<br>{items}<br><div style="display:flex; background-color: #f9f9f9; padding: 0px 3rem;"><div style="flex-grow: 2;">{pager}</div><div style="align-self:center;">'.$pageSizeDropDown.'</div></div>',
'pager' => [ 'maxButtonCount' => 320 ],
'filterSelector' => $searchModel->getPageSizeDropDownID(),
// filterSelector
is the core solution of this problem. It refreshes the grid.
```