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中强制下载文件的代码(解决了IE下中文文件名乱码问题)
May 09 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
Jan 06 PHP
PHP5.5在windows安装使用memcached服务端的方法
Apr 16 PHP
PHP程序员常见的40个陋习,你中了几个?
Nov 20 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
Mar 19 PHP
php删除数组中重复元素的方法
Dec 22 PHP
php 变量引用与变量销毁机制详细介绍
Dec 05 PHP
YII框架批量插入数据的方法
Mar 18 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
Oct 06 PHP
php图片合成方法(多张图片合成一张)
Nov 25 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
May 27 PHP
laravel清除视图缓存的代码
Oct 23 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/03 咖啡文化
PHP中使用GD库创建圆形饼图的例子
2014/11/19 PHP
46 个非常有用的 PHP 代码片段
2016/02/16 PHP
PHP处理数组和XML之间的互相转换
2016/06/02 PHP
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
jQuery 各种浏览器下获得日期区别
2008/12/22 Javascript
jquery photoFrame 图片边框美化显示插件
2010/06/28 Javascript
js 处理URL实用技巧
2010/11/23 Javascript
jWiard 基于JQuery的强大的向导控件介绍
2011/10/28 Javascript
JS执行删除前的判断代码
2014/02/18 Javascript
javasctipt如何显示几分钟前、几天前等
2014/04/30 Javascript
浅谈JavaScript事件的属性列表
2015/03/01 Javascript
JavaScript判断表单为空及获取焦点的方法
2016/02/12 Javascript
jQuery基于$.ajax设置移动端click超时处理方法
2016/05/14 Javascript
由简入繁实现Jquery树状结构的方法(推荐)
2016/06/10 Javascript
简单实现jQuery级联菜单
2017/01/09 Javascript
Node.js+ES6+dropload.js实现移动端下拉加载实例
2017/06/01 Javascript
jQuery实现上传图片前预览效果功能
2017/08/03 jQuery
js禁止Backspace键使浏览器后退的实现方法
2017/09/01 Javascript
ES6 Object属性新的写法实例小结
2019/06/25 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
2020/07/28 Javascript
JavaScript 几种循环方式以及模块化的总结
2020/09/03 Javascript
python求素数示例分享
2014/02/16 Python
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
翻转数列python实现,求前n项和,并能输出整个数列的案例
2020/05/03 Python
html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法
2013/01/09 HTML / CSS
VICHY薇姿美国官方网站:欧洲药房第一的抗衰老品牌
2017/11/22 全球购物
服装行业创业计划书范文
2014/02/05 职场文书
2014年大学生党课心得体会范文
2014/03/29 职场文书
寻找最美家庭活动方案
2014/08/20 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
妈妈别哭观后感
2015/06/08 职场文书
毕业生求职自荐信(2016最新版)
2016/01/28 职场文书
学习计划是什么
2019/04/30 职场文书