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的计数器程序
Oct 09 PHP
php IP及IP段进行访问限制的代码
Dec 17 PHP
php生成SessionID和图片校验码的思路和实现代码
Mar 10 PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
Oct 12 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
Jun 10 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
Nov 07 PHP
php 魔术方法详解
Nov 11 PHP
php目录遍历函数opendir用法实例
Nov 20 PHP
php实现cookie加密的方法
Mar 10 PHP
ThinkPHP简单使用memcache缓存的方法
Nov 15 PHP
创建无限极分类树型结构的简单方法
Jun 20 PHP
PHP使用Redis实现Session共享的实现示例
May 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
php存储过程调用实例代码
2013/02/03 PHP
Php中使用Select 查询语句的实例
2014/02/19 PHP
php实现的日历程序
2015/06/18 PHP
php微信公众号开发(3)php实现简单微信文本通讯
2016/12/15 PHP
php面向对象之反射功能与用法分析
2017/03/29 PHP
php+ajax 文件上传代码实例
2019/03/18 PHP
jquery随机展示头像代码
2011/12/21 Javascript
javascript如何动态加载表格与动态添加表格行
2013/11/27 Javascript
node.js中的fs.readFile方法使用说明
2014/12/15 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
手机开发必备技巧:javascript及CSS功能代码分享
2015/05/25 Javascript
JQuery+CSS实现图片上放置按钮的方法
2015/05/29 Javascript
javascript实现下班倒计时效果的方法(可桌面通知)
2015/07/10 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
使用Angular.js开发的注意事项
2016/10/19 Javascript
详解Angular 自定义结构指令
2017/06/21 Javascript
vue通过接口直接下载java生成好的Excel表格案例
2020/10/26 Javascript
jquery实现拖拽添加元素功能
2020/12/01 jQuery
[02:45]DOTA2英雄基础教程 伐木机
2013/12/23 DOTA
Python完全新手教程
2007/02/08 Python
Python2随机数列生成器简单实例
2017/09/04 Python
200 行python 代码实现 2048 游戏
2018/01/12 Python
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
Python魔法方法 容器部方法详解
2020/01/02 Python
python 成功引入包但无法正常调用的解决
2020/03/09 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
amazeui页面分析之登录页面的示例代码
2020/08/25 HTML / CSS
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
房屋公证委托书
2014/04/03 职场文书
《鸟岛》教学反思
2014/04/26 职场文书
2014年十一国庆节爱国演讲稿
2014/09/23 职场文书
2015年幼儿园元旦亲子活动方案
2014/12/09 职场文书
2016年第二十届“母亲节暨幸福工程救助贫困母亲活动日”活动总结
2016/04/06 职场文书
详解MySQL集群搭建
2021/05/26 MySQL
Python实现智慧校园自动评教全新版
2021/06/18 Python