热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Yii框架中使用CLinkPager实现分页功能

Yii框架中使用CLinkPager实现分页功能

控制器中的代码:

$criteria = new CDbCriteria();
$criteria->order = 'update_time desc';
$criteria->cOndition= 'id = :id';
$criteria->params = array(':id'=>id);
$count = Product::model()->count($criteria);
$pager = new CPagination($count);
$pager->pageSize = 24;  //每页显示的个数
$pager->applyLimit($criteria);
$criteria->select = 'id,title,img';
$products = Product::model()->findAll($criteria);
$this->render('view',array('pages'=>$pager,'products'=>$products));

在视图中的代码:

widget('TLinkPager',array(   //此处Yii内置的是CLinkPager,我继承了CLinkPager并重写了相关方法
    'header'=>'',
    'prevPageLabel' => '上一页',
    'nextPageLabel' => '下一页',
    'pages' => $pager,       
    'maxButtonCount'=>10,    //分页数目
    'htmlOptions'=>array(
       'class'=>'paging',   //包含分页链接的div的class
     )
  )
  );
?>

我在处理的时候继承了内置的CLinkPager类并重写了相关方法来实现自己的目的,主要是修改了样式和标签,以及增加了跳转到指定页面的功能,代码如下:

class TLinkPager extends CLinkPager{
    const CSS_PREVIOUS_PAGE='prev';
    const CSS_NEXT_PAGE='next';
    const CSS_INTERNAL_PAGE='';
    const CSS_HIDDEN_PAGE='hidden';
    const CSS_SELECTED_PAGE='pageed'; 

    public function init()
    {
            if($this->nextPageLabel===null)
                    $this->nextPageLabel=Yii::t('yii','Next >');
            if($this->prevPageLabel===null)
                    $this->prevPageLabel=Yii::t('yii','htmlOptions['id']))
                    $this->htmlOptions['id']=$this->getId();
            if(!isset($this->htmlOptions['class']))
                    $this->htmlOptions['class']='yiiPager';
    }

    public function run()
    {
            $this->registerClientScript();
            $buttOns=$this->createPageButtons();
            $buttons[] = CHtml::tag('span', array('style'=>'height:25px;width:100px;text-align:center;line-height:25px;margin-left:148px;'),'共'.$this->getPageCount().'页');
            $buttons[] = CHtml::tag('span', array('style'=>'height:25px;line-height:25px;margin-left:30px;'), '前往第??'.CHtml::textField('pageNumber', '', array(
                'style'=>'border:1px solid #717071;width:42px;height:21px;text-align:center',
            )).CHtml::tag('span',array('id'=>'gotoBtn'),'确定').'??页');
            if(empty($buttons))
                    return;
            echo $this->header;
            echo CHtml::tag('div',$this->htmlOptions,implode("\n",$buttons));
            echo $this->footer;
    }

    protected function createPageButton($label,$page,$class,$hidden,$selected)
    {
            if($hidden || $selected)
                    $class.=' '.($hidden ? $this->hiddenPageCssClass : $this->selectedPageCssClass);
            return CHtml::link($label,$this->createPageUrl($page),array('class'=>$class));
    }

    protected function createPageButtons()
    {
            if(($pageCount=$this->getPageCount())<=1)
                     return array();
            list($beginPage,$endPage)=$this->getPageRange();
            $currentPage=$this->getCurrentPage(false); // currentPage is calculated in getPageRange()
            $buttOns=array();

            // first page
            //$buttons[]=$this->createPageButton($this->firstPageLabel,0,$this->firstPageCssClass,$currentPage<=0,false);

            // prev page
            if(($page=$currentPage-1)<0)
                     $page=0;
             $buttons[]=$this->createPageButton($this->prevPageLabel,$page,$this->previousPageCssClass,$currentPage<=0,false);

            // internal pages
            for($i=$beginPage;$i<=$endPage;++$i)
                     $buttons[]=$this->createPageButton($i+1,$i,$this->internalPageCssClass,false,$i==$currentPage);

            // next page
            if(($page=$currentPage+1)>=$pageCount-1)
                    $page=$pageCount-1;
            $buttons[]=$this->createPageButton($this->nextPageLabel,$page,$this->nextPageCssClass,$currentPage>=$pageCount-1,false);

            // last page
            //$buttons[]=$this->createPageButton($this->lastPageLabel,$pageCount-1,$this->lastPageCssClass,$currentPage>=$pageCount-1,false);

            return $buttons;
    }

}

最终效果如下所示:

分页效果

某些CSS样式定义在CSS样式文件中,这里不再列出。

关于跳转到指定页面是仿淘宝的功能效果,将在下一篇:《js仿淘宝在分页导航中实现跳转到指定分页功能》中详述。

有什么问题可以通过下面的回复框进行回复,我会第一时间回馈


推荐阅读
  • 使用Adobe Illustrator打造独特的家族徽章:牡鹿图腾设计教程
    本文详细介绍了一种基于《权力的游戏》灵感,运用Adobe Illustrator创作独特家族图腾——牡鹿徽章的方法。本教程不仅展示了具体的步骤,还提供了多种技巧,帮助读者创作出既具个人特色又符合设计原则的作品。 ... [详细]
  • 本文介绍如何利用Python中的Epoll机制构建一个高效的Web服务器,该服务器能够处理多个并发连接,并向每个连接的客户端返回预定义的响应文本。通过使用Epoll,服务器可以实现高性能的I/O多路复用。 ... [详细]
  • 一、数据更新操作DML语法中主要包括两个内容:查询与更新,更新主要包括:增加数据、修改数据、删除数据。其中这些操作是离不开查询的。1、增加数据语法:INSERTINTO表名称[(字 ... [详细]
  • 解决fetch上传图片至微信公众号H5页面的问题
    在近期的一个项目需求中,需要在微信公众号内嵌入H5页面,并实现用户通过该页面上传图片的功能,包括拍摄新照片或从已有相册中选择。前端开发中采用了fetch API进行接口调用,但遇到了上传图片时数据无法正确传递的问题。 ... [详细]
  • Elasticsearch基础操作指南:使用Postman进行数据管理
    本文将介绍如何利用Postman工具执行基本的日志写入和数据管理操作。通过本教程,您将了解如何连接至Elasticsearch服务,创建索引,存储及检索数据。 ... [详细]
  • 统计报表模板及其实现方法
    本文介绍两个实用的统计报表模板,并提供如何将这些静态模板转换为动态JSP页面的方法。同时,文中附上了详细的代码示例。 ... [详细]
  • 本文探讨了为何采用RESTful架构及其优势,特别是在现代Web应用开发中的重要性。通过前后端分离和统一接口设计,RESTful API能够提高开发效率,支持多种客户端,并简化维护。 ... [详细]
  • 本文详细探讨了在Windows Server 2003环境下遇到MySQL连接失败(错误代码10061)的解决方案,包括通过卸载特定的Windows更新和调整系统注册表设置的方法。 ... [详细]
  • Linux环境下Memcached安装指南
    本文详细介绍如何在Linux虚拟机上安装Memcached,包括必要的依赖库安装,以及使用Xshell进行文件传输的具体步骤。 ... [详细]
  • 本文旨在介绍Three.js的基础概念及其应用场景。Three.js是一个基于WebGL的JavaScript库,用于在网页上创建和显示3D图形。文中将从Canvas的基本功能出发,探讨其局限性,并引出WebGL及Three.js的解决方案。 ... [详细]
  • 本文介绍了一个简单的Python函数,该函数能够接收一个日期作为输入,并返回这一天是星期几。此功能通过使用Python的datetime模块实现。 ... [详细]
  • 在Backbone框架中,视图(View)的操作至关重要,包括模板渲染及事件处理等。为了提升代码的可读性和维护性,通常建议将界面根据功能拆分为多个视图。本文将探讨如何在父子视图间有效地传递值,并指出在实现过程中应注意的关键点。 ... [详细]
  • 本文探讨了通过数组操作、事件委托、插件化开发、字符串拼接优化、HTML5 Data属性的使用、优先采用原生JavaScript以及JavaScript文件的压缩等方法,来提升jQuery应用程序的性能。 ... [详细]
  • 本文详细介绍了如何通过 `vue.config.js` 文件配置 Vue CLI 的打包和代理设置,包括开发服务器配置、跨域处理以及生产环境下的代码压缩和资源压缩。 ... [详细]
  • 本文探讨了Tomcat在启动过程中遇到的‘严重: Null组件’警告,并提供了解决此问题的方法,特别是当Tomcat使用的JRE版本低于应用所需版本时的处理方案。 ... [详细]
author-avatar
love四叶草health
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有