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 相关文章推荐
PHP中使用foreach和引用导致程序BUG的问题介绍
Sep 05 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
Nov 26 PHP
php断点续传之如何分割合并文件
Mar 22 PHP
php检测文件编码的方法示例
Apr 25 PHP
php自定义加密与解密程序实例
Dec 31 PHP
PHP使用mysqldump命令导出数据库
Apr 14 PHP
php生成Android客户端扫描可登录的二维码
May 13 PHP
Yii框架弹出框功能示例
Jan 07 PHP
ThinkPHP实现简单登陆功能
Apr 28 PHP
PHP实现下载远程图片保存到本地的方法
Jun 19 PHP
PHP 对象接口简单实现方法示例
Apr 13 PHP
浅析PHP中json_encode与json_decode的区别
Jul 15 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
《魔兽争霸3:重制版》翻车了?你想要的我们都没有
2019/11/07 魔兽争霸
php xml文件操作代码(一)
2009/03/20 PHP
php float不四舍五入截取浮点型字符串方法总结
2013/10/28 PHP
Smarty模板学习笔记之Smarty简介
2014/05/20 PHP
利用php的ob缓存机制实现页面静态化方法
2017/07/09 PHP
浅谈laravel 5.6 安装 windows上使用composer的安装过程
2019/10/18 PHP
JTrackBar水平拖动效果
2007/07/15 Javascript
JavaScript的9个陷阱及评点分析
2008/05/16 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
2015/01/08 Javascript
JavaScript制作简易的微信打飞机
2015/03/31 Javascript
JS访问SWF的函数用法实例
2015/07/01 Javascript
js实现简单秒表走动的时钟特效
2020/03/25 Javascript
jquery可定制的在线UEditor编辑器
2015/11/17 Javascript
javascript实现复选框全选或反选
2017/02/04 Javascript
微信小程序开发图片拖拽实例详解
2017/05/05 Javascript
vue-element-admin 菜单标签失效的解决方式
2019/11/12 Javascript
前端vue-cli项目中使用img图片和background背景图的几种方法
2019/11/13 Javascript
python自动安装pip
2014/04/24 Python
Python中使用装饰器时需要注意的一些问题
2015/05/11 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
浅谈python3.x pool.map()方法的实质
2019/01/16 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
2019/04/01 Python
django query模块
2019/04/20 Python
python 三元运算符使用解析
2019/09/16 Python
查看端口并杀进程python脚本代码
2019/12/17 Python
Tensorflow使用Anaconda、pycharm安装记录
2020/07/29 Python
意大利宠物用品购物网站:Bauzaar
2018/09/15 全球购物
介绍一下write命令
2012/09/24 面试题
高中毕业生自我鉴定
2013/11/03 职场文书
公司接待方案
2014/03/08 职场文书
工厂门卫岗位职责范本
2014/04/04 职场文书
政府门卫岗位职责
2014/04/29 职场文书
战略性融资合作协议书范本
2014/10/17 职场文书
为Centos安装指定版本的Docker
2022/04/01 Servers