Yii2:在分页器处呈现页面大小选择器的简单方法

Yii2: Easy way to render page size selector at the paginator

是否有任何简单的本机方法可以将 html 每个页面选择器的项目呈现添加到 ListView 的分页器?我查看了文档:

  1. Yii widget listview
  2. Yii data pagination
  3. Yii widgets linkpager

找到我需要的一切,除了呈现页面大小选择器。这有点奇怪,因为这是一个很常见的功能。

不,没有本地方法可以执行此操作,您可以创建自己的方法或使用此方法:

在您的模型过滤器中定义:

    class YOUR_CLASS_FILTER extend YOUR_MODEL
       
    
        ...
           public $pagesize; // Property pagesize.
           const ITEMS_PER_PAGE_INIT = 12; // Initial items per page
           ...
        
           //Add or edit this in the same model `search` method:
           public function search($params){    
           ...
           $dataProvider = new ActiveDataProvider([
                    'query' => $query,
                    'pagination' => [
                        // this $params['pagesize'] is an id of dropdown list that we set in view file
                        'pagesize' => ($this->pagesize) ? $this->pagesize : self::ITEMS_PER_PAGE_INIT,
                    ],
                ]);
           ...
           }    
           ... 
           public function rules()
            {
                return [
                    ...
                    [['pagesize'], 'integer'],
                    ...
                ];
            }
            ...
    /**
     * Return Static Array of elements per page
     * @return array
     */
    public static function itemsPerPage()
    {
        return array(
            12 => 12,
            24 => 24,
            48 => 48
        );
    }
}

这是我在视图文件中的实现方式:

<?= $form->field($filter, 'pagesize')->dropDownList(
    $filter->itemsPerPage(),
    array(
      'id' => 'pagesize',
      'class' => 'form-control',
      'onchange' => 'this.form.submit()',
    ))->label("Items per page: ")
?>

使用不同的 per-page 选项作为 GET 参数创建包含指向当前页面的链接的菜单:

<ul>
    <li><?= yii\helpers\Html::a('10', yii\helpers\Url::current(['per-page' => 10])) ?></li>
    <li><?= yii\helpers\Html::a('25', yii\helpers\Url::current(['per-page' => 25])) ?></li>
    <li><?= yii\helpers\Html::a('50', yii\helpers\Url::current(['per-page' => 50])) ?></li>
</ul>