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 将字符串按大写字母分隔成字符串数组
Apr 30 PHP
那些年一起学习的PHP(三)
Mar 22 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
Jun 14 PHP
php 强制下载文件实现代码
Oct 28 PHP
php实现文件编码批量转换
Mar 10 PHP
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
Jun 06 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
Jun 09 PHP
php中Ctype函数用法详解
Dec 09 PHP
PHP中使用file_get_contents post数据代码例子
Feb 13 PHP
php阳历转农历优化版
Aug 08 PHP
php代码调试利器firephp安装与使用方法分析
Aug 21 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
Dec 12 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
乱谈我对耳机、音箱的感受
2021/03/02 无线电
如何去掉文章里的 html 语法
2006/10/09 PHP
php一句话cmdshell新型 (非一句话木马)
2009/04/18 PHP
xml在joomla表单中的应用详解分享
2012/07/19 PHP
php.ini修改php上传文件大小限制的方法详解
2013/06/17 PHP
PHP多例模式介绍
2013/06/24 PHP
百度站点地图(百度sitemap)生成方法分享
2014/01/09 PHP
快速解决PHP调用Word组件DCOM权限的问题
2017/12/27 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
2019/10/21 PHP
Javascript 获取滚动条位置等信息的函数
2009/09/08 Javascript
Javascript拓展String方法小结
2013/07/08 Javascript
判断日期是否能跨月查询的js代码
2014/07/25 Javascript
Javascript检查图片大小不要让大图片撑破页面
2014/11/04 Javascript
c#+jquery实现获取radio和checkbox的值
2020/09/12 Javascript
jquery简单的弹出层浮动层代码
2015/04/27 Javascript
利用jsonp跨域调用百度js实现搜索框智能提示
2016/08/24 Javascript
Seajs是什么及sea.js 由来,特点以及优势
2016/10/13 Javascript
使用ReactJS实现tab页切换、菜单栏切换、手风琴切换和进度条效果
2016/10/17 Javascript
jquery+ajax实现省市区三级联动效果简单示例
2017/01/04 Javascript
Vue filter介绍及详细使用
2018/04/04 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
vue element动态渲染、移除表单并添加验证的实现
2019/01/16 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
2020/07/19 Javascript
vue在App.vue文件中监听路由变化刷新页面操作
2020/08/14 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
教你安装python Django(图文)
2013/11/04 Python
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
Python 25行代码实现的RSA算法详解
2018/04/10 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
2018/07/11 Python
python MNIST手写识别数据调用API的方法
2018/08/08 Python
Python tkinter实现图片标注功能(完整代码)
2019/12/08 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
LightInTheBox法国站:中国跨境电商
2020/03/05 全球购物
民政局标准版离婚协议书
2014/12/01 职场文书
2015年个人招商工作总结
2015/04/25 职场文书