[Решено] pager в GridView

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
AIR
Сообщения: 28
Зарегистрирован: 2014.10.31, 17:35

[Решено] pager в GridView

Сообщение AIR »

Добрый день уважаемые программисты.
Только начал изучать Yii2 и столкнулся с массой проблем и недопониманий.
Одна из них, как реализовать pagination в виджете GridView.
У нас есть публичное свойство в виджете $pager, что ему присвоить, чтобы, напимер, список пользователей выводился по 10 на страницу.

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

<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        //'pager'
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],
            'name',
            'mail',
            'city_id' => [
                'attribute' => 'city_id',
                'value' => function ($model) { return $model->city->name; }
            ],
            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>
Последний раз редактировалось AIR 2014.11.14, 18:32, всего редактировалось 1 раз.
Аватара пользователя
asset
Сообщения: 245
Зарегистрирован: 2012.12.04, 20:50
Откуда: Казахстан

Re: pager в GridView

Сообщение asset »

если вы сгенерировали crud,то он обычно находиться search моделе

типа в таком виде

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

public function search($params)
    {
        $query = Posts::find()->published()->orderBy('create_time DESC');

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
            'pagination' => [
                 'forcePageParam' => false,
                 'pageSizeParam' => false,
                'pageSize' => 10
            ]
        ]);

        if (!($this->load($params) && $this->validate())) {
            return $dataProvider;
        }

        $query->andFilterWhere([
            'id' => $this->id,
            'fixed' => $this->fixed,
            'status_id' => $this->status_id,
            'views' => $this->views,
            'create_time' => $this->create_time,
            'update_time' => $this->update_time,
        ]);

        $query->andFilterWhere(['like', 'title', $this->title])
            ->andFilterWhere(['like', 'content', $this->content]);

        return $dataProvider;
    }
где 'pageSize' => 10 разбивка.

Можно сделать как yii1 разбивку.

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

$dataProvider = new ActiveDataProvider([
    'query' => User::find(),
    'pagination' => array('pageSize' => 50),
]);

echo \yii\widgets\LinkPager::widget([
    'pagination'=>$dataProvider->pagination,
]); 
Последний раз редактировалось asset 2014.11.13, 20:25, всего редактировалось 1 раз.
AIR
Сообщения: 28
Зарегистрирован: 2014.10.31, 17:35

Re: pager в GridView

Сообщение AIR »

asset писал(а):если вы сгенерировали crud,то он обычно находиться search моделе

типа в таком виде

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

public function search($params)
    {
        $query = Posts::find()->published()->orderBy('create_time DESC');

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
            'pagination' => [
                 'forcePageParam' => false,
                 'pageSizeParam' => false,
                'pageSize' => 10
            ]
        ]);

        if (!($this->load($params) && $this->validate())) {
            return $dataProvider;
        }

        $query->andFilterWhere([
            'id' => $this->id,
            'fixed' => $this->fixed,
            'status_id' => $this->status_id,
            'views' => $this->views,
            'create_time' => $this->create_time,
            'update_time' => $this->update_time,
        ]);

        $query->andFilterWhere(['like', 'title', $this->title])
            ->andFilterWhere(['like', 'content', $this->content]);

        return $dataProvider;
    }
где 'pageSize' => 10 разбивка. Можно сделать как yii1 разбивку.
Вот спасибо :) 3 часа битья головой об стену а решение то в serch моделе.
Тогда еще вопрос, если не генерировать CRUD с помощью GII и не создавать модель search (как это делалось в yii1), можно ли параметру $pager задать значение для того чтобы появилась листалка? Если да, то какое?
Аватара пользователя
asset
Сообщения: 245
Зарегистрирован: 2012.12.04, 20:50
Откуда: Казахстан

Re: pager в GridView

Сообщение asset »

AIR писал(а):
asset писал(а):если вы сгенерировали crud,то он обычно находиться search моделе

типа в таком виде

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

public function search($params)
    {
        $query = Posts::find()->published()->orderBy('create_time DESC');

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
            'pagination' => [
                 'forcePageParam' => false,
                 'pageSizeParam' => false,
                'pageSize' => 10
            ]
        ]);

        if (!($this->load($params) && $this->validate())) {
            return $dataProvider;
        }

        $query->andFilterWhere([
            'id' => $this->id,
            'fixed' => $this->fixed,
            'status_id' => $this->status_id,
            'views' => $this->views,
            'create_time' => $this->create_time,
            'update_time' => $this->update_time,
        ]);

        $query->andFilterWhere(['like', 'title', $this->title])
            ->andFilterWhere(['like', 'content', $this->content]);

        return $dataProvider;
    }
 
где 'pageSize' => 10 разбивка. Можно сделать как yii1 разбивку.
Вот спасибо :) 3 часа битья головой об стену а решение то в serch моделе.
Тогда еще вопрос, если не генерировать CRUD с помощью GII и не создавать модель search (как это делалось в yii1), можно ли параметру $pager задать значение для того чтобы появилась листалка? Если да, то какое?
Обновил пост сверху. Гугли куча инфи по этому.
AIR
Сообщения: 28
Зарегистрирован: 2014.10.31, 17:35

Re: pager в GridView

Сообщение AIR »

asset писал(а):
AIR писал(а):
asset писал(а):если вы сгенерировали crud,то он обычно находиться search моделе

типа в таком виде

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

public function search($params)
    {
        $query = Posts::find()->published()->orderBy('create_time DESC');

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
            'pagination' => [
                 'forcePageParam' => false,
                 'pageSizeParam' => false,
                'pageSize' => 10
            ]
        ]);

        if (!($this->load($params) && $this->validate())) {
            return $dataProvider;
        }

        $query->andFilterWhere([
            'id' => $this->id,
            'fixed' => $this->fixed,
            'status_id' => $this->status_id,
            'views' => $this->views,
            'create_time' => $this->create_time,
            'update_time' => $this->update_time,
        ]);

        $query->andFilterWhere(['like', 'title', $this->title])
            ->andFilterWhere(['like', 'content', $this->content]);

        return $dataProvider;
    }
 
где 'pageSize' => 10 разбивка. Можно сделать как yii1 разбивку.
Вот спасибо :) 3 часа битья головой об стену а решение то в serch моделе.
Тогда еще вопрос, если не генерировать CRUD с помощью GII и не создавать модель search (как это делалось в yii1), можно ли параметру $pager задать значение для того чтобы появилась листалка? Если да, то какое?
Обновил пост сверху. Гугли куча инфи по этому.
Огромное спасибо, но инфы я этой почему то не не нашел. Но уже понял :)
Ответить