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 相关文章推荐
PHPMailer 中文使用说明小结
Jan 22 PHP
PHP下打开phpMyAdmin出现403错误的问题解决方法
May 23 PHP
使用PHP静态变量当缓存的方法
Nov 13 PHP
PHP函数microtime()用法与说明
Dec 04 PHP
PHP中PDO连接数据库中各种DNS设置方法小结
May 13 PHP
PHP将页面中点击数量高的链接进行高亮显示的方法
May 30 PHP
php封装的mysqli类完整实例
Oct 18 PHP
PHP内存缓存功能memcached示例
Oct 19 PHP
PHP parse_ini_file函数的应用与扩展操作示例
Jan 07 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
Oct 21 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 PHP
如何判断微信付款码和支付宝付款码
Apr 01 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
建立文件交换功能的脚本(一)
2006/10/09 PHP
php 保留小数点
2009/04/21 PHP
php微信公众平台开发类实例
2015/04/01 PHP
如何使用Gitblog和Markdown建自己的博客
2015/07/31 PHP
PHP实现的超长文本分页显示功能示例
2018/06/04 PHP
JSON 数据格式介绍
2012/01/13 Javascript
javascript学习笔记(十七) 检测浏览器插件代码
2012/06/20 Javascript
实现51Map地图接口(示例代码)
2013/11/22 Javascript
一个简单的JavaScript Map实例(分享)
2016/08/03 Javascript
JavaScript 数据类型详解
2017/03/13 Javascript
node.js爬虫爬取拉勾网职位信息
2017/03/14 Javascript
vue获取DOM元素并设置属性的两种实现方法
2017/09/30 Javascript
详解如何在vue项目中使用lodop打印插件
2018/09/27 Javascript
vue项目移动端实现ip输入框问题
2019/03/19 Javascript
vue配置nprogress实现页面顶部进度条
2019/09/21 Javascript
JS轮播图的实现方法
2020/08/24 Javascript
Python标准库内置函数complex介绍
2014/11/25 Python
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
python交互模式下输入换行/输入多行命令的方法
2019/07/02 Python
python tkinter库实现气泡屏保和锁屏
2019/07/29 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
Python实现加密接口测试方法步骤详解
2020/06/05 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
德国运动鞋网上商店:Afew Store
2018/01/05 全球购物
应届生护士求职信
2013/11/01 职场文书
国家励志奖学金获奖感言
2014/01/09 职场文书
运动会致辞稿50字
2014/02/04 职场文书
《黄河颂》教学反思
2014/02/07 职场文书
2014学习优秀共产党员先进事迹材料思想汇报
2014/09/14 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
幼儿园教师个人总结
2015/02/05 职场文书
大学生入党自传2015
2015/06/26 职场文书
2015秋季田径运动会广播稿
2015/08/19 职场文书
2019事业单位个人工作总结范文
2019/08/26 职场文书
MySQL之MyISAM存储引擎的非聚簇索引详解
2022/03/03 MySQL
springboot 全局异常处理和统一响应对象的处理方式
2022/06/28 Java/Android