Если бы мне пришлось это сделать, я бы использовал следующий подход.
- Создайте раскрывающийся список для размеров страницы. Вы можете настроить раскрывающийся список в параметре
layout
вида сетки, если хотите, чтобы он находился между текстом summary
и списком items
, или добавить его перед видом сетки. как это изображение, вы можете обернуть его с помощью div, чтобы настроить его самостоятельно.
Главное, что нужно сделать, это включить id
раскрывающегося списка в параметр filterSelector
, чтобы каждый раз при фильтрации сетки отображалось значение раскрывающегося списка, а также при каждом изменении раскрывающегося списка.
Ваш 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 $myPageSize
Добавьте это свойство к безопасным правилам в вашей searchModel
[['myPageSize'],'safe']
А затем обновите ваш search()
метод внутри относительного SearchModel
, который вы используете с GridView
. Вам следует присвоить pageSize
параметр query
внутри $dataProvider
с новым определенным свойством, но обязательно добавьте эту строку после оператора $this->load($params)
.
см. Ниже
$dataProvider->pagination->pageSize = ($this->myPageSize !== NULL) ? $this->myPageSize : 10;`
Здесь мы устанавливаем размер страницы по умолчанию, равный минимальному параметру внутри раскрывающегося списка, который мы создали, в противном случае он будет обновляться при каждом изменении раскрывающегося списка.
Теперь попробуйте изменить выпадающий список, вы увидите, что он работает. Надеюсь, это поможет