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之PHP语法学习笔记1
Dec 17 PHP
PHP面向对象——访问修饰符介绍
Nov 08 PHP
PHP jQuery表单,带验证具体实现方法
Feb 15 PHP
php画图实例
Nov 05 PHP
thinkphp3.0输出重复两次的解决方法
Dec 19 PHP
php将csv文件导入到mysql数据库的方法
Dec 24 PHP
symfony表单与页面实现技巧
Jan 26 PHP
php实现每天自动变换随机问候语的方法
May 12 PHP
php使用MySQL保存session会话的方法
Jun 18 PHP
PHP指定截取字符串中的中英文或数字字符的实例分享
Mar 18 PHP
php实现的rc4加密解密类定义与用法示例
Aug 16 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
Jan 28 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
在php中使用sockets:从新闻组中获取文章
2006/10/09 PHP
PHP4在WinXP下IIS和Apache2服务器上的安装实例
2006/10/09 PHP
YII Framework教程之异常处理详解
2016/03/14 PHP
JQUBar 基于JQUERY的柱状图插件
2010/11/23 Javascript
iframe实用操作锦集
2014/04/22 Javascript
jQuery插件slides实现无缝轮播图特效
2015/04/17 Javascript
浅析Node.js实现HTTP文件下载
2016/08/05 Javascript
详解vue.js组件化开发实践
2016/12/14 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
2017/07/03 Javascript
jQuery事件_动力节点Java学院整理
2017/07/05 jQuery
解决Vue页面固定滚动位置的处理办法
2017/07/13 Javascript
js编写简单的聊天室功能
2017/08/17 Javascript
js实现京东秒杀倒计时功能
2019/01/21 Javascript
关于layui的动态图标不显示的解决方法
2019/09/04 Javascript
Vue 实现从文件中获取文本信息的方法详解
2019/10/16 Javascript
vue中注册自定义的全局js方法
2019/11/15 Javascript
在Vue中实现随hash改变响应菜单高亮
2020/03/09 Javascript
JavaScript布尔运算符原理使用解析
2020/05/06 Javascript
基于javascript canvas实现五子棋游戏
2020/07/08 Javascript
python抓取网页中的图片示例
2014/02/28 Python
python中星号变量的几种特殊用法
2016/09/07 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
2018/04/17 Python
python爬虫获取小区经纬度以及结构化地址
2018/12/30 Python
用Python获取摄像头并实时控制人脸的实现示例
2019/07/11 Python
python中@property和property函数常见使用方法示例
2019/10/21 Python
解决Python spyder显示不全df列和行的问题
2020/04/20 Python
深入浅析Python代码规范性检测
2020/07/31 Python
意大利高端时尚买手店:Stefania Mode
2018/03/01 全球购物
编写类String 的构造函数、析构函数和赋值函数
2012/09/09 面试题
生物化工工艺专业应届生求职信
2013/10/08 职场文书
起诉书格式范文
2015/05/20 职场文书
2015年教研室工作总结范文
2015/05/23 职场文书
解除处分决定书
2015/06/25 职场文书
小学生组织委员竞选稿
2015/11/21 职场文书
CentOS7安装MySQL8的超级详细教程(无坑!)
2022/06/10 Servers
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle