首页 > 解决方案 > ListView 中 Yii 2 分页的问题

问题描述

Yii 2 分页有问题。我的情况有点奇怪。我想要做的是一个 ListView,里面有一些 ChartJS。问题是当我点击页面按钮时,整个页面都会重新加载。ListView 在手风琴组件内,也许这是我无法解决的问题。这是我的代码:

在站点控制器中:

    $usercenters = Yii::$app->mycomponent->getCenIds();
                            $query = new Query;
                            $query->select('distinct(center.id)')
                                ->from('campaign_center')
                                ->innerjoin('center', 'center.id = campaign_center.center_id')
                                ->where("campaign_center.campaign_id = " . $_POST['campaignid'])
                                ->andWhere("campaign_center.center_id in(" . $usercenters . ")");
                            $centers = $query->all();
                            $page = $_POST['page'];
                            $provider = new ArrayDataProvider([
                                'allModels' => $centers,
                                'pagination' => [
                                    'pageSize' => 3,
                                    'page' => $page,
                                    'totalCount' => $query->count()
                                ],
                                'sort' => [
                                    'attributes' => ['id'],
                                ],
                            ]);
                            return $this->renderAjax('_campaigntypeslevel_list', ['tipojerarquia' => $_POST['tipojerarquia'], 'origincampaigntype' => $_POST['origincampaigntype'], 'campaignid' => $_POST['campaignid'],'provider'=>$provider, 'centers'=>$centers,'usercenters'=>$usercenters]);

第一个视图(_campaigntypeslevel_list):

    Pjax::begin(['timeout' => 10000, 'clientOptions' => ['container' => 'pjax-container']]);
    echo ListView::widget([
         'id'=>'centerslistview',
         'dataProvider' => $provider,
         'layout' => '<div>{summary}</div><div>{pager}</div><div>{items}</div>',
         'itemView'     =>'_centers',
         'viewParams' => ['tipojerarquia' => $tipojerarquia, 
         'center' => $centermodel->id, 'campaign' => $campaignid, 
         'origincampaigntype' => $origincampaigntype, 'dataPie' => 
         $dataPie, 'dataBox' => $dataBox, '$dataPieLastYear' => 
         $dataPieLastYear, 'dataBoxLastYear'=>$dataBoxLastYear,'centers'=>$centers,'usercenters'=>$usercenters],
 ]);
    Pjax::end();

最后在 _centers 视图中:

    <?php
   use app\models\Campaign;
   use app\models\Center;

   $campaignmodel = Campaign::findOne($campaign);
   $dataPie = Yii::$app->chartfunctions->getHomeNPSData(Yii::$app->user->identity, NULL, $model['id'], NULL, $campaignmodel->id, NULL, NULL);
   $dataBox = Yii::$app->chartfunctions->getHomeNPSDataByMonth(Yii::$app->user->identity, NULL, $model['id'], NULL, $campaignmodel->id, NULL, NULL);
   $dataPieLastYear = Yii::$app->chartfunctions->getHomeNPSData(Yii::$app->user->identity, NULL, $model['id'], NULL, $campaignmodel->id, NULL, date('Y'));
   $dataBoxLastYear = Yii::$app->chartfunctions->getHomeNPSDataByMonth(Yii::$app->user->identity, NULL, $model['id'], NULL, $campaignmodel->id, NULL, date('Y'));
   echo \Yii::$app->controller->renderPartial('_boxcontent', ['tipojerarquia' => $tipojerarquia, 'center' => $model['id'], 'campaign' => $campaignmodel->id, 'origincampaigntype' => $origincampaigntype, 'dataPie' => $dataPie, 'dataBox' => $dataBox, '$dataPieLastYear' => $dataPieLastYear, 'dataBoxLastYear' => $dataBoxLastYear],false,true);

   ?>

也许渲染不正确?

标签: phppaginationyii2

解决方案


The problem is coming from the pajax.

PJAX has timeout option. If PJAX not obtain AJAX response during this timeout, it will perform full page reload.

Check the answers in this question, its the same problem, maybe you will find the light:

How to refresh pjax listview in yii2? It reloads the entire page


推荐阅读