YII CLinkPager分页类扩展增加显示共多少页


Posted in PHP onJanuary 29, 2016

yii的分页类CLinkPager默认是不支持显示共x页的,那么现在需求来了,要在分页的后面显示共多少页,怎么办喃?我们来看解决办法

1、默认的CLinkPager显示的效果

上面这里写了css的样式哈,我们来看pager代码:

<div class="page-link">
<?php $this->widget('CLinkPager',array(
'header' => '',
'firstPageLabel' => '首页',
'lastPageLabel' => '尾页',
'prevPageLabel' => '<',
'nextPageLabel' => '>',
'pages' => $pages,
'maxButtonCount'=>5,
'htmlOptions' => array('class' => 'page-link'), //分页要使用的css样式
));?>
</div>

2、我们来看想要的分页类效果

也就是说后面增加显示了共多少页,这个怎么做到的喃?这里我稍微小小的扩展了一下widget组件CLinkPager,看上去也是非常的狠狠简单呐,废话不多少,来来先看代码:

<?php
/**
* 分页组建ClinkPager扩展
* @description page-tab-tog为分页的样式class
* @author <[<xm 杭州>]>
* @time 2016-01-29
* @example
* <div class="page-tab-tog">
* <?php $this->widget('MLinkPager',array(
* 'header' => '',
* 'firstPageLabel' => '首页',
* 'lastPageLabel' => '尾页',
* 'prevPageLabel' => '<',
* 'nextPageLabel' => '>',
* 'pages' => $pages,
* 'maxButtonCount'=>5,
* 'htmlOptions' => array('class' => 'page-tab-tog'),
* ));?>
* </div>
*/
class MLinkPager extends CLinkPager
{
//设置为true的时候,显示共X页,$this->forceTotalPage值优先该值
public $mCountPage = false;
//是否强制显示共x页,设置为true时,$this->mCountPage和$this->getPageRange()无效
public $forceTotalPage = false;
public function init()
{
}
public function run()
{
$this->registerClientScript();
$buttons=$this->createPageButtons();
list($beginPage,$endPage)=$this->getPageRange();
if ($this->forceTotalPage)
{
$buttons[] = CHtml::tag('li', array('class'=>'totle'),'共'.$this->getPageCount().'页');
}
else
{
if ($this->mCountPage && $endPage > 0)
{
$buttons[] = CHtml::tag('li', array('class'=>'totle'),'共'.$this->getPageCount().'页');
}
}
if(empty($buttons))
return;
echo $this->header;
echo CHtml::tag('div',$this->htmlOptions,implode("\n",$buttons));
echo $this->footer;
}
}

有人说了,一看那么一堆代码,头疼,你这玩意怎么能以最快的速度见到效果呢?来来我们继续看怎么使用,首先呢,你需要先把上面的扩展MLinkPager原封不动的拷贝到本地的components目录下的MlinkPager文件里,什么,你没有这个文件,自己创建,^~^!好了以后咱们来看下view里面是怎么使用的,那是简单的不能再过于简单了。

<div class="page-tab-tog">
<?php $this->widget('MLinkPager',array(
'header' => '',
'firstPageLabel' => '首页',
'lastPageLabel' => '尾页',
'prevPageLabel' => '<',
'nextPageLabel' => '>',
'pages' => $pages,
'maxButtonCount'=>5,
'mCountPage' => true, //!!!注意看这里,加一行代码就ok了
'htmlOptions' => array('class' => 'page-tab-tog'),
));?>
</div>

什么?你刚睡醒眼神不好,没看出来区别?注意看MLinkPager的配置项mCountPage,这个设置为true就万事大吉了!

特别说明:如果你的列表没有数据的话,分页是不显示页码的,但是如果有刁蛮产品要的需求是没有列表数据,但但但你必须得吧共0页显示出来,我们的MlinkPager只需要设置下配置项forceTotalPage为true即可,此时设置mCountPager无效了咯,具体详细请看MlinkPage类,次类可自己再进行扩展

下面给大家介绍在在yii中使用分页

yii中使用分页很方便,如下两种方法:

在控制器中:

1、

$criteria = new CDbCriteria(); //new cdbcriteria数据库<br>$criteria->id = 'id ASC'; //排序规则
$count = Exchange::model()->count($criteria);
$pager = new CPagination($count);
$pager->pageSize=30;
$pager->applyLimit($criteria);
$categoryInfo = Category::model()->findAll($criteria); //根据条件查询

2、

$criteria = new CDbCriteria();
$criteria->order = 'id ASC';
$criteria->addCondition('status=1'); //根据条件查询
$criteria->addCondition('exchange_status=0');
$count = Exchange::model()->count($criteria);
$pager = new CPagination($count);
$pager->pageSize=30;
$pager->applyLimit($criteria); 
$exchangeInfo = Exchange::model()->findAll($criteria);

 render中传入参数:

array("pages" => $pager)

 视图中加入:

$this->widget('CLinkPager',array(
'header'=>'',
'firstPageLabel' => '首页',
'lastPageLabel' => '末页',
'prevPageLabel' => '上一页',
'nextPageLabel' => '下一页',
'pages' => $pages,
'maxButtonCount'=>8,
)
);

分页思想:

1、计算数据库中总的条数

2、分页大小

3、设置偏移量limit

在Yii中,分页时会用这个类CDBcritria进行数据库查询很重要,这样分页很简单。

PHP 相关文章推荐
一个阿拉伯数字转中文数字的函数
Oct 09 PHP
php类中private属性继承问题分析
Nov 01 PHP
深入PHP购物车模块功能分析(函数讲解,附源码)
Jun 25 PHP
php导出word格式数据的代码实例
Nov 25 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
Aug 20 PHP
php实现的css文件背景图片下载器代码
Nov 11 PHP
Laravel 5框架学习之Eloquent 关系
Apr 09 PHP
php将金额数字转化为中文大写
Jul 09 PHP
php实现多城市切换特效
Aug 09 PHP
php打包网站并在线压缩为zip
Feb 13 PHP
Yii2框架实现数据库常用操作总结
Feb 08 PHP
php批量修改表结构实例
May 24 PHP
实例详解PHP中html word 互转的方法
Jan 28 #PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
Jan 28 #PHP
PHP的压缩函数实现:gzencode、gzdeflate和gzcompress的区别
Jan 27 #PHP
PHP文件上传之多文件上传的实现思路
Jan 27 #PHP
PHP内核学习教程之php opcode内核实现
Jan 27 #PHP
PHP编程入门的基本语法知识点总结
Jan 26 #PHP
PHP数组游标实现对数组的各种操作详解
Jan 26 #PHP
You might like
桌面中心(四)数据显示
2006/10/09 PHP
遍历指定目录下的所有目录和文件的php代码
2011/11/27 PHP
php导出word文档与excel电子表格的简单示例代码
2014/03/08 PHP
PHP框架Laravel的小技巧两则
2015/02/10 PHP
php动态添加url查询参数的方法
2015/04/14 PHP
php将图片文件转换成二进制输出的方法
2015/06/10 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
读jQuery之九 一些瑕疵说明
2011/06/21 Javascript
关于ExtJS4.1:快捷键支持的问题
2013/04/24 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
2013/08/05 Javascript
浅析jquery的js图表组件highcharts
2014/03/06 Javascript
JavaScript实现页面跳转的方式汇总
2016/05/16 Javascript
JSON字符串和对象相互转换实例分析
2016/06/16 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
轻松理解Javascript变量的相关问题
2017/01/20 Javascript
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
js 中rewrap-ajax.js插件实例代码
2017/10/20 Javascript
Vue 过滤器filters及基本用法
2017/12/26 Javascript
vue自定义指令之面板拖拽的实现
2019/04/14 Javascript
基于JS开发微信网页录音功能的实例代码
2019/04/30 Javascript
json解析大全 双引号、键值对不在一起的情况
2019/12/06 Javascript
vue页面更新patch的实现示例
2020/03/25 Javascript
vue addRoutes路由动态加载操作
2020/08/04 Javascript
[01:01:43]EG vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
[36:33]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.29
2020/12/02 DOTA
用Pygal绘制直方图代码示例
2017/12/07 Python
Python 中的range(),以及列表切片方法
2018/07/02 Python
Linux下python3.7.0安装教程
2018/07/30 Python
Pandas库之DataFrame使用的学习笔记
2019/06/21 Python
Python数据类型之列表和元组的方法实例详解
2019/07/08 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
小学教师的自我评价范例
2013/10/31 职场文书
元旦晚会主持词
2014/03/24 职场文书
机关会计岗位职责
2014/04/08 职场文书
篮球比赛拉拉队口号
2014/06/10 职场文书
初中优秀学生评语
2014/12/29 职场文书