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 相关文章推荐
玩转图像函数库―常见图形操作
Sep 03 PHP
用PHP的ob_start();控制您的浏览器cache!
Feb 14 PHP
PHP 获取客户端真实IP地址多种方法小结
May 15 PHP
php 连接mysql连接被重置的解决方法
Feb 15 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
Apr 21 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
Jun 23 PHP
PHP中的gzcompress、gzdeflate、gzencode函数详解
Jul 29 PHP
php中异常处理方法小结
Jan 09 PHP
php截取html字符串及自动补全html标签的方法
Jan 15 PHP
PHP使用Mysqli类库实现完美分页效果的方法
Apr 07 PHP
PHP微信刮刮卡 附微信接口
Jul 22 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Dec 14 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
thinkphp3.2实现跨控制器调用其他模块的方法
2017/03/14 PHP
Laravel使用RabbitMQ的方法示例
2019/06/18 PHP
jQuery实现表头固定效果的实例代码
2013/05/24 Javascript
初步认识JavaScript函数库jQuery
2015/06/18 Javascript
jquery实现具有嵌套功能的选项卡
2016/02/12 Javascript
全屏js头像上传插件源码高清版
2016/03/29 Javascript
JS button按钮实现submit按钮提交效果
2016/11/01 Javascript
Angularjs 动态添加指令并绑定事件的方法
2017/04/13 Javascript
JS中用EL表达式获取上下文参数值的方法
2018/03/28 Javascript
Node.js引入UIBootstrap的方法示例
2018/05/11 Javascript
Nuxt.js 数据双向绑定的实现
2019/02/17 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
vuex存取值和映射函数使用说明
2020/07/24 Javascript
结合axios对项目中的api请求进行封装操作
2020/09/21 Javascript
[56:41]iG vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/17 DOTA
Python中dictionary items()系列函数的用法实例
2014/08/21 Python
python中List的sort方法指南
2014/09/01 Python
python根据出生日期返回年龄的方法
2015/03/26 Python
Python实现求笛卡尔乘积的方法
2017/09/16 Python
浅谈Python黑帽子取代netcat
2018/02/10 Python
详解python列表生成式和列表生成式器区别
2019/03/27 Python
python使用OpenCV模块实现图像的融合示例代码
2020/04/10 Python
浅析NumPy 切片和索引
2020/09/02 Python
python3定位并识别图片验证码实现自动登录功能
2021/01/29 Python
原生 JS+CSS+HTML 实现时序图的方法
2019/07/31 HTML / CSS
KIKO比利时官网:意大利彩妆品牌
2017/07/23 全球购物
美国网上鞋子零售商:Dr. Scholl’s Shoes
2017/11/17 全球购物
4s店活动策划方案
2014/08/25 职场文书
庆祝教师节标语
2014/10/09 职场文书
银行授权委托书样本
2014/10/13 职场文书
2014年工程部工作总结
2014/11/25 职场文书
2014年物资管理工作总结
2014/12/02 职场文书
教师自荐信范文
2015/03/06 职场文书
机修车间主任岗位职责
2015/04/08 职场文书
2015年世界无烟日活动方案
2015/05/04 职场文书
windows server2012 R2下安装PaddleOCR服务的的详细步骤
2022/09/23 Servers