gridView и количество записей на странице

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

gridView и количество записей на странице

Сообщение girmate »

Кода никакого нету - опишу словами.
Используется обычный датапровайдер совместно с gridView (или даже listView). Хочу во вьюшке сделать настраиваемое количество записей на странице, например: Показывать по: 10, 20, 50, 100 элементов. В виде ссылок.
Не могу понять как это реализовать. Опишите текстом, если кто уже делал.

То есть разово в ссылке я бы мог ввести некоторый параметр page_size, и получить его из реквеста, подставив в датапровайдер. Но как его потом протягивать повсюду? Фильтры ведь передаются POST запросом. И как-то в пагинацию нужно добавлять этот параметр. А штука полезная ведь. Причем для сортировки линки сделали, а для вот такой штуки я не могу понять как. Заранее благодарен.
Осторожно! Вы общаетесь с новичком ;)
Аватара пользователя
darlov
Сообщения: 204
Зарегистрирован: 2012.01.31, 16:09

Re: gridView и количество записей на странице

Сообщение darlov »

Недавно делал такую штуку.
Просто создаете ссылки c количеством записей и к ссылке с текущим url добавляется get параметр с необходимом количеством, а в методе searh() вашей модели читаете и указываете

Код: Выделить всё

$dataProvider->pagination->pageSize
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: gridView и количество записей на странице

Сообщение ElisDN »

В провайдере повышаем предел:

Код: Выделить всё

'pagination' => [
    'pageSizeLimit' => [1, 500],
],
и в представлении генерируем ссылки с использованием встроенного per-page::

Код: Выделить всё

Html::a(100, Url::current(['per-page' => 100]))
Аватара пользователя
darlov
Сообщения: 204
Зарегистрирован: 2012.01.31, 16:09

Re: gridView и количество записей на странице

Сообщение darlov »

ElisDN писал(а):В провайдере повышаем предел:

Код: Выделить всё

'pagination' => [
    'pageSizeLimit' => [1, 500],
],
и в представлении генерируем ссылки с использованием встроенного per-page::

Код: Выделить всё

Html::a(100, Url::current(['per-page' => 100]))
Не знал о pageSizeLimit...Спасибо)
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: gridView и количество записей на странице

Сообщение girmate »

ElisDN писал(а):В провайдере повышаем предел:

Код: Выделить всё

'pagination' => [
    'pageSizeLimit' => [1, 500],
],
и в представлении генерируем ссылки с использованием встроенного per-page::

Код: Выделить всё

Html::a(100, Url::current(['per-page' => 100]))
pageSizeLimit лишь включает ограничение, то есть как бы защита от +100500 сущностей на странице? Его можно и не указывать в данном случае?
Осторожно! Вы общаетесь с новичком ;)
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: gridView и количество записей на странице

Сообщение ElisDN »

girmate писал(а):pageSizeLimit лишь включает ограничение, то есть как бы защита от +100500 сущностей на странице?
Да, ограничивает допустимый диапазон.
girmate писал(а):Его можно и не указывать в данном случае?
Если не указать, то по умолчанию он равен [1, 50], поэтому срежет до 50.
Restlin
Сообщения: 139
Зарегистрирован: 2011.09.09, 18:12

Re: gridView и количество записей на странице

Сообщение Restlin »

Давно хотел спросить об этом свойстве pageSizeLimit, что вынудило его ввести в yii2?
Была большая статистика жалоб на слишком большие sizeLimit?
По идее ведь за установку обоих свойств (pageSizeLimit и sizeLimit) отвечает разработчик и если он хочет убить сервер тяжелым sql-запросом и огромной выборкой, то изменение двух свойств, а не одного - его не остановит.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: gridView и количество записей на странице

Сообщение zelenin »

Restlin писал(а):Давно хотел спросить об этом свойстве pageSizeLimit, что вынудило его ввести в yii2?
Была большая статистика жалоб на слишком большие sizeLimit?
По идее ведь за установку обоих свойств (pageSizeLimit и sizeLimit) отвечает разработчик и если он хочет убить сервер тяжелым sql-запросом и огромной выборкой, то изменение двух свойств, а не одного - его не остановит.
можно в урле указать per-page=1000000 и pageSizeLimit на стороне кода позволит ограничить в данном случае максимальный pageSize.
Restlin
Сообщения: 139
Зарегистрирован: 2011.09.09, 18:12

Re: gridView и количество записей на странице

Сообщение Restlin »

zelenin писал(а):
Restlin писал(а):Давно хотел спросить об этом свойстве pageSizeLimit, что вынудило его ввести в yii2?
Была большая статистика жалоб на слишком большие sizeLimit?
По идее ведь за установку обоих свойств (pageSizeLimit и sizeLimit) отвечает разработчик и если он хочет убить сервер тяжелым sql-запросом и огромной выборкой, то изменение двух свойств, а не одного - его не остановит.
можно в урле указать per-page=1000000 и pageSizeLimit на стороне кода позволит ограничить в данном случае максимальный pageSize.
Да, логично, спасибо.
Аватара пользователя
Introvert
Сообщения: 139
Зарегистрирован: 2017.07.04, 13:42
Откуда: Украина, Киев

Re: gridView и количество записей на странице

Сообщение Introvert »

Как сделать не ссылку, а select-ом, 30, 50, 100 ?
Пишу социальную сеть заявок для фирм.
Nerf
Сообщения: 780
Зарегистрирован: 2015.01.29, 00:37

Re: gridView и количество записей на странице

Сообщение Nerf »

Introvert писал(а): 2018.01.27, 15:05 Как сделать не ссылку, а select-ом, 30, 50, 100 ?
Никак. Без js...
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: gridView и количество записей на странице

Сообщение ElisDN »

Код: Выделить всё

<?php
$values = [15, 25, 50, 75, 100];
$current = $dataProvider->getPagination()->getPageSize();
?>
<select class="form-control" onchange="location = this.value;">
    <?php foreach ($values as $value): ?>
        <option value="<?= Html::encode(Url::current(['per-page' => $value, 'page' => null])) ?>" <?php if ($current == $value): ?>selected="selected"<?php endif; ?>><?= $value ?></option>
    <?php endforeach; ?>
</select>
Аватара пользователя
Introvert
Сообщения: 139
Зарегистрирован: 2017.07.04, 13:42
Откуда: Украина, Киев

Re: gridView и количество записей на странице

Сообщение Introvert »

ElisDN писал(а): 2018.01.28, 08:53

Код: Выделить всё

<?php
$values = [15, 25, 50, 75, 100];
$current = $dataProvider->getPagination()->getPageSize();
?>
<select class="form-control" onchange="location = this.value;">
    <?php foreach ($values as $value): ?>
        <option value="<?= Html::encode(Url::current(['per-page' => $value, 'page' => null])) ?>" <?php if ($current == $value): ?>selected="selected"<?php endif; ?>><?= $value ?></option>
    <?php endforeach; ?>
</select>
Благодарю)
Пишу социальную сеть заявок для фирм.
dymsonn
Сообщения: 77
Зарегистрирован: 2018.06.13, 15:37

Re: gridView и количество записей на странице

Сообщение dymsonn »

А может подскажете, как дополнить указанный селект ссылочкой "Все" с аналогичной названию логикой?
И вопрос о глобальной, вдруг найду ответ, почему этим фукционалом на владеет summary? Это я к тому, что может я просто чего то не знаю :oops:
Ответить