ListView::widget pagination

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
kutsanov
Сообщения: 165
Зарегистрирован: 2012.02.08, 15:22

ListView::widget pagination

Сообщение kutsanov »

Что я делаю не так?
Причем если в SqlDataProvider прописываю свойство - pagination, то все работает
Но как то не очень логично это делать в этом месте (так как разные могут быть представления)
Может кто подскажет, заранее спасибо!

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

echo ListView::widget([
                        'dataProvider' => $webinarsDataProviderLast,
                        'itemView' => '//webinar/index_webinar_item',
                        'layout' => "<div class='lst row'>{items}</div><div>{pager}</div>",
                        'pager' => [
                                'pagination'=> [
                                    'pageSize' => 3,
                                    'params'=>['flag_last'=>1]
                                ]
                        ],
                        'options' => [
                            'tag' => 'div',
                            'class' => 'webinar',
                        ],
                        'itemOptions' => [
                            'tag' => 'div',
                            'class' => 'col-lg-4 col-md-6 mb-4 d-flex',
                        ],
                    ]);
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: ListView::widget pagination

Сообщение yiijeka »

kutsanov
Сообщения: 165
Зарегистрирован: 2012.02.08, 15:22

Re: ListView::widget pagination

Сообщение kutsanov »

yiijeka писал(а): 2017.05.17, 11:11 Что подсказать?

http://www.yiiframework.com/doc-2.0/yii ... ger-detail

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

'pager' => [
                                'pagination'=> [
                                    'pageSize' => 3,
                                    'params'=>['flag_last'=>1]
                                ]
                        ],
не работает этот кусок кода
вернее исходя из документации он должен подставлять свои настройки в провайдер, а он не подставляет
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: ListView::widget pagination

Сообщение yiijeka »

обычно нужно указать 'class'=> ... , если свойство чего-либо конфигурируется как объект.
kutsanov
Сообщения: 165
Зарегистрирован: 2012.02.08, 15:22

Re: ListView::widget pagination

Сообщение kutsanov »

пробовал, не помогло
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: ListView::widget pagination

Сообщение Alexum »

Попробуйте так:

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

...
'pager' => [
            'pagination' => $webinarsDataProviderLast->setPagination(['pageSize' => 3])
],
...
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: ListView::widget pagination

Сообщение yiijeka »

Короче ему всё равно, что вы там будете писать в pager, он pagination берёт тупо всегда из $dataProvider

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

public function renderPager()
    {
        $pagination = $this->dataProvider->getPagination();
        if ($pagination === false || $this->dataProvider->getCount() <= 0) {
            return '';
        }
        /* @var $class LinkPager */
        $pager = $this->pager;
        $class = ArrayHelper::remove($pager, 'class', LinkPager::className());
        $pager['pagination'] = $pagination;
        $pager['view'] = $this->getView();

        return $class::widget($pager);
    }
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: ListView::widget pagination

Сообщение yiijeka »

Либо это недоработка кода, либо комментарий надо улучшить:
>
Note that the widget must support the `pagination` property which will be populated with the
* [[\yii\data\BaseDataProvider::pagination|pagination]] value of the [[dataProvider]].
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: ListView::widget pagination

Сообщение yiijeka »

Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: ListView::widget pagination

Сообщение Alexum »

Так что вызывайте setPagination() с нужными параметрами либо в контроллере перед передачей во view, либо в модели перед виджетом. Либо как я предложил, но это сломается как только пофиксят :D
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: ListView::widget pagination

Сообщение yiijeka »

не сломается...
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: ListView::widget pagination

Сообщение Alexum »

Т.е. будет нормально проглатывать такой массив?

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

'pager' => [
            'pagination' => null
],
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: ListView::widget pagination

Сообщение yiijeka »

зачем?

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

$webinarsDataProviderLast->setPagination([....]);
echo ListView::widget([
                        'dataProvider' => $webinarsDataProviderLast,
                        'itemView' => '//webinar/index_webinar_item',
                        'layout' => "<div class='lst row'>{items}</div><div>{pager}</div>",                        
                        'options' => [
                            'tag' => 'div',
                            'class' => 'webinar',
                        ],
                        'itemOptions' => [
                            'tag' => 'div',
                            'class' => 'col-lg-4 col-md-6 mb-4 d-flex',
                        ],
                    ]);
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: ListView::widget pagination

Сообщение Alexum »

Мы просто недопоняли друг друга. Конечно все варианты "до виджета" будут рабочими. Я имел ввиду, что этот вариант может сломать виджет в будущем: viewtopic.php?p=217440#p217440.
Ответить