为gridview设置分页在yii2基本应用

时间:2017-09-07 11:52:17

标签: pagination yii2

我使用yii2基本应用程序并使用过滤器和搜索的gridview。  我希望每10条记录分页一次。我该怎么办?

我知道在dataprovider中添加分页但是如何将它添加到我的函数中?

请帮帮我。 这对我很重要。  我做了很多搜索,但无法找到解决方案

控制器:

public function actionIndex()
{
    $searchModel = new ContactSearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

    return $this->render('index', [
        'searchModel'=>$searchModel,
        'dataProvider' => $dataProvider,
    ]);
}

模型\ contactsearch.php

 <?php
 namespace app\models;

 use app\models\Contact;
 use yii\base\Model;
 use yii\data\ActiveDataProvider;

class ContactSearch extends Contact {
public function rules() {
    return [

        [['f_name', 'l_name', 'phone_number', 'Mobile_number'], 'safe'],
    ];
}

public function scenarios() {
    return Model::scenarios();
}

public function search($params) {
    $query = Contact::find();

    $dataProvider = new ActiveDataProvider([
        'query' => $query,
        'sort' => [
    'defaultOrder' => [
        'l_name' => SORT_DESC,
    ],

],
    ]);

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

    $query->andFilterWhere(['like', 'f_name', $this->f_name])
          ->andFilterWhere(['like', 'l_name', $this->l_name])
          ->andFilterWhere(['like', 'phone_number', $this->phone_number])
          ->andFilterWhere(['like', 'Mobile_number', $this->Mobile_number]);

          //->andorderBy('id asc');

    return $dataProvider;

}
}

?>

视图

  <?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel'=>$searchModel,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],

        'f_name',
        'l_name',
        'phone_number',
        'Mobile_number',

        ['class' => 'yii\grid\ActionColumn'],
    ],
]); ?>

2 个答案:

答案 0 :(得分:1)

在gridview中自定义记录金额

$dataProvider = new ActiveDataProvider([
    'query' => $query,
 //show 10 items per page
'pagination' => [
    'pagesize' => 10,
],
    'sort' => [
'defaultOrder' => [
    'l_name' => SORT_DESC,
],

其他选择是: stackoverflow link

答案 1 :(得分:0)

在控制器中:

function actionIndex()
{
    $query = Article::find()->where(['status' => 1]);
    $countQuery = clone $query;
    $pages = new Pagination(['totalCount' => $countQuery->count()]);
    $models = $query->offset($pages->offset)
        ->limit($pages->limit)
        ->all();

    return $this->render('index', [
         'models' => $models,
         'pages' => $pages,
    ]);
}
In view file:

foreach ($models as $model) {
    // display $model here
}

// display pagination
echo LinkPager::widget([
    'pagination' => $pages,
]);