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

Yii2:在分页器上呈现页面大小选择器的简单方法,yii2,paginator,Yii2,Paginator,是否有任何简单的本地方法可以将每页项目的html呈现添加到ListView的paginator中?我已经看过了这些文件: 找到我需要的一切,除了呈现页面大小选择器。这有点奇怪,因为这是一个非常常见的功能。不,没有本机方法可以做到这一点,您可以创建自己的或使用此方法: 在模型过滤器中定义: class YOUR_CLASS_FILTER extend YOUR_MODEL ... public $pagesize; //

是否有任何简单的本地方法可以将每页项目的html呈现添加到ListView的paginator中?我已经看过了这些文件:


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

    不,没有本机方法可以做到这一点,您可以创建自己的或使用此方法:

    在模型过滤器中定义:

        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: ")
    ?>
    

    不,没有本机方法,您可以创建自己的或使用此方法:

    在模型过滤器中定义:

        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: ")
    ?>
    

    创建一个菜单,其中包含指向当前页面的链接,并使用不同的每页选项作为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>
    

    创建一个菜单,其中包含指向当前页面的链接,并使用不同的每页选项作为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>
    

    此解决方案也适用。谢谢此解决方案也适用。谢谢