yii2.0 分页
yii2 2017-07-03 10:24:44
PHP Code复制内容到剪贴板
  1. <?= \yii\widgets\LinkPager::widget([  
  2.     'pagination' => $dataProvider->pagination,  
  3.     'firstPageLabel' => '首页',  
  4.     'lastPageLabel' => '尾页',  
  5.     'nextPageLabel' => '下一页',  
  6.     'prevPageLabel' => '上一页',  
  7.     'maxButtonCount' => 5,             // 默认显示的页码为10页  
  8.     'hideOnSinglePage' => false,        //不够2页,默认不显示分页  
  9.     'prevPageCssClass' => 'previous',  
  10.     'nextPageCssClass' => 'next',  
  11.     'options' => ['class' => 'page''tag' => 'ul'],  
  12.       'linkContainerOptions' => ['tag' => 'li']  
  13. ]); ?>  

 

 

m2.jpg

GII生成,searchmodel:

1.jpg

控制器:

PHP Code复制内容到剪贴板
  1. public function actionIndex()  
  2. {  
  3.     $model = new Tag();  
  4.   
  5.     $searchModel = new TagSearch();  
  6.     $dataProvider = $searchModel->search(Yii::$app->request->queryParams);  
  7.   
  8.     return $this->render('/index', [  
  9.         'model' => $model,  
  10.         'searchModel' => $searchModel,  
  11.         'dataProvider' => $dataProvider,  
  12.     ]);  
  13. }  

 

 

PHP Code复制内容到剪贴板
  1. $dataProvider = new ActiveDataProvider([  
  2.             'query' => $query,  
  3.             'pagination' => [  
  4.                 'pageSizeParam' => 'pageSize',   /* 定义传输的每页显示变量名,默认为per-page */  
  5.                 'pageParam'=> 'pageNo'      /* 定义传输的页码变量名,默认为page */  
  6.             ],  
  7.             'sort' => [  
  8.                 'defaultOrder' => [  
  9.                     'id' => SORT_DESC  
  10.                 ]  
  11.             ]  
  12.         ]);  

 

 

 

view:

PHP Code复制内容到剪贴板
  1. use yii\grid\GridView;  
  2.   
  3.   
  4. GridView::widget([  
  5.     'dataProvider' => $dataProvider,  
  6.     'filterModel' => $searchModel,  
  7.     'columns' => [  
  8.         'tag_id',  
  9.         'tag_name',  
  10. //                'link_plan_num',  
  11.         'tag_style',  
  12.         [  
  13.             'class' => 'app\widgets\grid\SwitcherColumn',  
  14.             'attribute' => 'status'  
  15.         ],  
  16.         [  
  17.             'class' => 'yii\grid\ActionColumn',  
  18.             'header' => '操作',  
  19.             'buttons' => [  
  20.                 'view' => function ($url$model) {  
  21.                     return Html::a(Html::icon('eye'), ['/admin/tag/view/''id' => $model->tag_id, 'mid' => Yii::$app->request->get("mid")], ['class' => 'btn btn-default btn-xs''title' => '查看']);  
  22.                 },  
  23.                 'update' => function ($url$model) {  
  24.                     return Html::a(Html::icon('eyedropper'), ['/admin/tag/update/''id' => $model->tag_id, 'mid' => Yii::$app->request->get("mid")], ['class' => 'btn btn-default btn-xs''title' => '编辑']);  
  25.                 },  
  26.                 'delete' => function ($url$model) {  
  27.                     return Html::a(Html::icon('trash'), ['/admin/tag/delete''id' => $model->tag_id, 'mid' => Yii::$app->request->get("mid")], ['class' => 'btn btn-default btn-xs''title' => '删除']);  
  28.                 },  
  29.             ]  
  30.         ],  
  31.     ],  
  32. ]);  

 

 

在API中支持:

PHP Code复制内容到剪贴板
  1. $pageSize = request()->post("pageSize",10);  
  2.  $pageNo = request()->post("pageNo",1);  
  3.  $searchModel = new SupplierSearch();  
  4.  $dataProvider = $searchModel->search(Yii::$app->request->queryParams);  
  5.  $dataProvider->pagination = [  
  6.      'pageSize' => $pageSize,  
  7.      'page' => $pageNo  
  8.  ];  

 

 

 

 

以下两种方式,search无效:

 

第一种:Activedataprovider 类分页的使用

PHP Code复制内容到剪贴板
  1. use yii\data\ActiveDataProvider;  
  2. use mdu\tag\model\Tag;  
  3.   
  4. public function actionIndex()  
  5. {  
  6.     $model = new Tag();  
  7.     $searchModel = new TagSearch();  
  8.     $dataProvider = new ActiveDataProvider([  
  9.         'query' => $model->find(),  
  10.         'pagination' => [  
  11.             'pagesize' => '10',  
  12.         ]  
  13.     ]);  
  14.       
  15.     return $this->render('/index', [  
  16.         'model' => $model,  
  17.         'searchModel' => $searchModel,  
  18.         'dataProvider' => $dataProvider,  
  19.     ]);  
  20. }  

 

view代码

PHP Code复制内容到剪贴板
  1. use yii\grid\GridView;   
  2.     
  3.     
  4. GridView::widget([  
  5.     'dataProvider' => $dataProvider,  
  6.     'filterModel' => $searchModel,  
  7.     'columns' => [  
  8.         'attribute',  
  9.          [  
  10.              'attribute' => 'create_time',  
  11.              'format' => ['data''Y-m-d H:i:s'],  
  12.              'options' => ['width' => '200']  
  13.          ]],   
  14.          ['class' => 'yii\grid\ActionColumn''header' => '操作''headerOptions' => ['width' => '80']],    
  15. ]);    

 

第二种分页方法:

控制器:

PHP Code复制内容到剪贴板
  1. <?php  
  2.   
  3. use yii\data\Pagination;  
  4. use app\models\Comment;  
  5.   
  6.   public function actionComment(){  
  7.        $data = Comment::find()->andWhere(['id' => '10']);  
  8.        $pages = new Pagination(['totalCount' =>$data->count(), 'pageSize' => '2']);  
  9.        $model = $data->offset($pages->offset)->limit($pages->limit)->all();  
  10.          
  11.        return $this->render('comment',[  
  12.              'model' => $model,  
  13.              'pages' => $pages,  
  14.        ]);  
  15.   }  
  16. ?>  

 

view:

PHP Code复制内容到剪贴板
  1. <?php  
  2.   
  3. use yii\widgets\LinkPager;  
  4. ?>  
  5.   
  6.       foreach($model as $key=>$val)  
  7.       {  
  8.            这里就是遍历数据了,省略......  
  9.       }  
  10.   
  11.       <?= LinkPager::widget(['pagination' => $pages]); ?>  

 

 

不分页:

PHP Code复制内容到剪贴板
  1. $dataProvider = new ActiveDataProvider([  
  2.             'query' => Problem::find()->where(['type' => 2]),  
  3.             'pagination' => false  
  4.         ]);  

 

 

 

QQ20171209-130413@2x.png 

控制层:

PHP Code复制内容到剪贴板
  1. use yii\data\Pagination;  
  2.   
  3.   
  4.         $pages = new Pagination(['totalCount' =>$query->count(), 'pageSize' => '10']);  
  5.         $model = $query->offset($pages->offset)->limit($pages->limit)->all();  

 

视图层:

 

PHP Code复制内容到剪贴板
  1. <?php  
  2. $request = Yii::$app->request;  
  3. $currentPage = $request->get("page", 1);// 当前页  
  4. $currentPage = $currentPage < 1 ? 1 : $currentPage//页码小于1的时候,默认等于1  
  5. $totalCount = $pages->totalCount; // 总个数  
  6. $pageSize = $pages->pageSize; //每页显示个数  
  7. $totalPage = ceil($totalCount / $pageSize); //总页数  
  8. ?>  
  9. <?php  
  10. if ($totalPage > 1) {  
  11.     ?>  
  12.     <!-- 分页 -->  
  13.     <div class="zhishi-page">  
  14.         <!--总页数-->  
  15.         <span>共<?= $totalCount ?>条</span>  
  16.   
  17.         <?php  
  18.         // 如果当前页码小于总页数,出现下一页  
  19.         if ($currentPage > 1) {  
  20.             ?>  
  21.             <a href="<?= Url::current(['page' => $currentPage - 1], true) ?>">上一页</a>  
  22.             <?  
  23.         }  
  24.         ?>  
  25.   
  26.         <?php for ($i = 1; $i <= $totalPage$i++): ?>  
  27.             <a href="<?= Url::current(['page' => $i], true) ?>"  
  28.                class="<?= $i ?> <?= $currentPage == $i ? "active" : "" ?>"><?= $i ?></a>  
  29.         <?php endfor; ?>  
  30.   
  31.         <?php  
  32.         // 如果当前页码小于总页数,出现下一页  
  33.         if ($currentPage < $totalPage) {  
  34.             ?>  
  35.             <a href="<?= Url::current(['page' => $currentPage + 1], true) ?>">下一页</a>  
  36.             <?  
  37.         }  
  38.         ?>  
  39.         <span>共<?= $totalPage ?>页</span>  
  40.     </div>  
  41.   
  42.     <?  
  43. }  
  44. ?>  

 

 


  

PHP Code复制内容到剪贴板
  1. $query = Plan::find();  
  2.         $countQuery = clone $query;  
  3.         $pages = new Pagination(['totalCount' => $countQuery->count()]);  
  4.         $models = $query->offset($pages->offset)  
  5.             ->limit($pages->limit)  
  6.             ->asArray()  
  7.             ->all();  
  8.   
  9.         $nodes = [];  
  10.         foreach ($models as $k => $v){  
  11.   
  12.             $nodes[] = [  
  13.                 "id" => $v["id"],  
  14.                 "id" => $v["id"],  
  15.             ];  
  16.         }  
  17. //        echo "共".$pages->getPageCount()."页 "; //每页显示个数  
  18. //        echo "第".($pages->page + 1)."页 ";  
  19. //        echo "共".$pages->totalCount."条".PHP_EOL; // 总个数  
  20. //        echo "每页显示:".$pages->pageSize."条".PHP_EOL; //每页显示个数  
  21. //        p($models);  

 

 

 

 

本文来自于:http://www.yoyo88.cn/study/yii2/118.html

Powered by yoyo苏ICP备15045725号