【问题标题】:How to set the number of items per page in a CGridView?如何在 CGridView 中设置每页的项目数?
【发布时间】:2012-04-30 23:26:21
【问题描述】:

我在 Yii 有一个项目,其中有一个 CGridView,默认情况下每页显示 10 条记录。如何将其设置为 100 条记录?

【问题讨论】:

    标签: php pagination yii


    【解决方案1】:

    您可以使用下拉菜单配置每页的项目。

    创建这样的部分。请按照以下步骤操作。

    为屏幕截图上的“Displaying 1-10 of 128”部分定义自定义模板。

    将这段代码添加到您的 Gridview 属性数组中。

    'summaryText' => 'Displaying {start}-{end} of {count} result(s). ' .
        CHtml::dropDownList('pageSize', $pageSize, Yii::app()->params['pageSizeOptions'], array('class' => 'change-pageSize')) .' rows per page',
    

    在视图顶部添加这一行

    $pageSize = Yii::app()->user->getState('pageSize', Yii::app()->params['defaultPageSize']);
    

    在同一视图中添加更改事件。

    jQuery(function ($) {
    $('body').on('change','.change-pageSize', function () {
        $.fn.yiiGridView.update('my-grid', {data: {pageSize: $(this).val()}
        })
    });
    });
    

    在模型搜索功能中添加此行,以设置活动数据提供者中的选定行数。

    $pageSize = Yii::app()->user->getState('pageSize', Yii::app()->params['defaultPageSize']);
    

    然后在controller中通过ajax接收view发送过来的page size参数。在控制器中使用以下代码行。

    if (isset($_GET['pageSize'])) {
                    Yii::app()->user->setState('pageSize', (int) $_GET['pageSize']);
                }
    

    在 Params.php 中添加此配置

    'defaultPageSize' => 20,
    'pageSizeOptions' => array(-1 =>'All' , 10 => 10, 20 => 20, 50 => 50, 100 => 100, 500 => 500),
    

    这对我有用!

    【讨论】:

      【解决方案2】:

      您可以在模型的搜索功能中进行如下配置:

      public function search()
      {
          $criteria=new CDbCriteria;
      
          $criteria->compare('id',$this->id,true);
          $criteria->compare('start_year',$this->start_year,true);
          $criteria->compare('end_year',$this->end_year,true);
          $criteria->compare('ref_lang_id',$this->ref_lang_id);
          $criteria->compare('submitted_at',$this->submitted_at,true);
          $criteria->compare('ref_submitted_user_id',$this->ref_submitted_user_id,true);
      
          return new CActiveDataProvider($this, array(
              'criteria'=>$criteria,
              'pagination' => array(
                  'pageSize' => 30,
              ),
          ));
      }
      

      【讨论】:

        【解决方案3】:

        在您的视图中找到正在呈现CGridView 小部件的位置,并配置数据提供者的pagination 属性:

        $this->widget('zii.widgets.CGridView', array(
            'dataProvider' => array(
                 /* other options for the data provider... */
                'pagination' => array('pageSize' => 100),
            ),
            /* other options for the grid view... */
        ));
        

        【讨论】:

        • @MickSegvezent:看起来数据提供者会覆盖它。查看更新。
        • @CarlosAlbertoMartínezGadea:这是一个如何做的例子,而不是你在代码中放入的魔法咒语,它无论如何都可以工作。您可能仍会遇到问题的原因有数百万。
        • @Jon 感谢您回复我,实际上我想再次评论,因为它对我不起作用的原因是我当时使用的是 CArrayDataProvider,它不能直接工作使用“分页”参数。虽然它与常规的 CActiveDataProvider 一起工作就像一个魅力。我已经删除了我的最后一条评论,所以我不会用那种简单而不具体的评论来打扰任何人;)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多