yii自己定义CLinkPager分页

在components中自己定义LinkPager。并继承CLinkPager

代码例如以下:

<?

php
/**
 * CLinkPager class file.
 *
 * @author liang.pingzheng
 * @QQ 327168521
 */
class PLinkPager extends CLinkPager
{
    const CSS_TOTAL_PAGE=‘total_page‘;
    const CSS_TOTAL_ROW=‘total_row‘;

    /**
     * @var string the text label for the first page button. Defaults to ‘<< First‘.
     */
    public $totalPageLabel;
    /**
     * @var string the text label for the last page button. Defaults to ‘Last >>‘.
     */
    public $totalRowLabel;
    public $uri;
    public $pageNum; //页数
    /**
     * Creates the page buttons.
     * @return array a list of page buttons (in HTML code).
     */
    private function getUri($pa){
        $url=$_SERVER["REQUEST_URI"].(strpos($_SERVER["REQUEST_URI"], ‘?

‘)?‘‘:"?").$pa;
        $parse=parse_url($url);

        if(isset($parse["query"])){
            parse_str($parse[‘query‘],$params);
            unset($params["page"]);
            $url=$parse[‘path‘].‘?

‘.http_build_query($params);
        }
        return $url;
    }        

    protected function createPageButtons()
    {
        $this->uri=$this->getUri($pa=‘‘);
        $this->maxButtonCount=8;
        $this->firstPageLabel="首页";
        $this->lastPageLabel=‘末页‘;
        $this->nextPageLabel=‘下一页‘;
        $this->prevPageLabel=‘上一页‘;
        $this->header="";

        if(($pageCount=$this->getPageCount())<=1)
            return array();

        list($beginPage,$endPage)=$this->getPageRange();
        $currentPage=$this->getCurrentPage(false); // currentPage is calculated in getPageRange()
        $this->pageNum = $pageCount;

        $buttons=array();
        // 页数统计
        $buttons[]=$this->createTotalButton(($currentPage+1)."/{$pageCount}",self::CSS_TOTAL_PAGE,false,false);

        // 条数统计
        $buttons[]=$this->createTotalButton("共{$this->getItemCount()}条",self::CSS_TOTAL_ROW,false,false);

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

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

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

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

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

        $buttons[] = ‘  <input type="text" onkeydown="javascript:if(event.keyCode==13){var page=(this.value>‘.$this->pageNum.‘)?‘.$this->pageNum.‘:this.value;location=\‘‘.$this->uri.‘&page=\‘+page+\‘\‘}" value="‘.($currentPage+1).‘" style="width:25px"><input type="button" value="GO" onclick="javascript:var page=(this.previousSibling.value>‘.$this->pageNum.‘)?‘.$this->pageNum.‘:this.previousSibling.value;location=\‘‘.$this->uri.‘&page=\‘+page+\‘\‘">  ‘;

        return $buttons;
    }

    protected function createTotalButton($label,$class,$hidden,$selected)
    {
        if($hidden || $selected)
            $class.=‘ ‘.($hidden ? self::CSS_HIDDEN_PAGE : self::CSS_SELECTED_PAGE);
        return ‘<li class="‘.$class.‘">‘.CHtml::label($label,false).‘</li>‘;
    }

    /**
     * Registers the needed client scripts (mainly CSS file).
     */
    public function registerClientScript()
    {
        //if($this->cssFile!==false)
        //	self::registerCssFile($this->cssFile);
    }

    /**
     * Registers the needed CSS file.
     * @param string $url the CSS URL. If null, a default CSS URL will be used.
     */
    public static function registerCssFile($url=null)
    {
        if($url===null)
                $url=CHtml::asset(Yii::getPathOfAlias(‘application.components.views.LinkPager.pager‘).‘.css‘);
        Yii::app()->getClientScript()->registerCssFile($url);
    }
}

定义CSS样式

**
 * 翻页样式
 */
.page_blue{
	margin: 3px;
	padding: 3px;
	text-align: center;
	font: 12px verdana, arial, helvetica, sans-serif;
}
ul.bluePager,ul.yiiPager
{
	font-size:11px;
	border:0;
	margin:0;
	padding:0;
	line-height:100%;
	display:inline;
	text-aligin:center;
}

ul.bluePager li,ul.yiiPager li
{
	display:inline;
}

ul.bluePager a:link,ul.yiiPager a:link,
ul.bluePager a:visited,ul.yiiPager a:visited,
ul.bluePager .total_page label,ul.yiiPager .total_page label,
ul.bluePager .total_row label,ul.yiiPager .total_row label
{
	border: #ddd 1px solid;
	color: #888888 !important;
	padding:2px 5px;
	text-decoration:none;
}

ul.bluePager .page a,ul.yiiPager .page a
{
	font-weight:normal;
}

ul.bluePager a:hover,ul.yiiPager a:hover
{
	color:#FFF !important; border:#156a9a 1px solid; background-color:#2b78a3
}

ul.bluePager .selected a,ul.yiiPager bluePager .selected a
{
	color:#3aa1d0 !important;
	border: 1px solid #3aa1d0;
}

ul.bluePager .selected a:hover,ul.yiiPager .selected a:hover
{
	color:#FFF !important;
}

ul.bluePager .hidden a,ul.yiiPager .hidden a
{
	border:solid 1px #DEDEDE;
	color:#888888;
}

ul.bluePager .hidden,ul.yiiPager .hidden
{
	display:none;
}

view调用实例

    <?php
        $this->widget(‘PLinkPager‘,array(
            ‘prevPageLabel‘=>‘上一页‘,
            ‘nextPageLabel‘=>‘下一页‘,
            ‘pages‘ =>$pager,
            ‘maxButtonCount‘=>10,//分页数目
        ));
    ?

>
时间: 2024-10-12 22:06:47

yii自己定义CLinkPager分页的相关文章

yii自定义CLinkPager分页

在components中自定义LinkPager,并继承CLinkPager 代码如下: <?php /** * CLinkPager class file. * * @author liang.pingzheng * @QQ 327168521 */ class PLinkPager extends CLinkPager { const CSS_TOTAL_PAGE='total_page'; const CSS_TOTAL_ROW='total_row'; /** * @var string

Yii Framework2.0开发教程(4)在yii中定义全局变量

在yii中定义全局变量最好的地方是入口脚本处.也就是web文件夹中的index.php文件 例如我们在defined('YII_ENV') or define('YII_ENV', 'dev');后写上 defined('ZYL_HEHE') or define('ZYL_HEHE','zhyoulun-hehe'); 并在我们教程(1)中建立的views/zhyoulun/helloworld.php文件中写上 <?php echo 'hello world!'; //全局变量 echo co

yii 分页总结

yii带有几个分页类,后台的CGridView,这个就是用gii自动生成代码的分页使用的,带有ajax的检索功能.另外两个是CLinkPage和CListView,就我知道的说,第一个可以来做一般的分页,后一个可以很方便的来做ajax分页,下面就来具体的实现. 1.实验的数据表: CREATE TABLE `pagelist` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(255) DEFAULT NULL, P

Yii 分页方法

说明:这里介绍两种分页方法案例 1.CListView 2.CLinkPager 第一种CListView分页方法的使用说明: yii框架链接:http://www.php100.com/manual/yii/CListView.html 源代码:framework/zii/widgets/CListView.php 格式如下代码: $dataProvider=new CActiveDataProvider('Post'); $this->widget('zii.widgets.CListVie

Yii 1开发日记 -- Ajax实现点击加载下一页

功能实现:先输出一页的内容,然后点击加载下一页,如图 1.控制器中 1 /** 2 * 消费记录:列出用户购买章节的记录 3 */ 4 public function actionMyPayHis() 5 { 6 //点击加载更多 7 if( Yii::app()->request->isAjaxRequest ) { 8 //分页 9 $pg = isset( $_GET[ "pg" ] ) ? $_GET[ "pg" ] : 1; 10 $page

材料管理框架:一个共通的viewModel搞定所有的分页查询

前言 大家看标题就明白了我想写什么了,在做企业信息化系统中可能大家写的最多的一种页面就是查询页面了.其实每个查询页面,除了条件不太一样,数据不太一样,其它的其实都差不多.所以我就想提取一些共通的东西出来,再写查询时只要引入我共通的东西,再加上极少的代码就能完成.我个人比较崇尚代码简洁干净,有不合理的地方欢迎大家指出. 这篇文章主要介绍两个重点:1.前台viewModel的实现.2.后台服务端如何简洁的处理查询请求. 需求分析 查询页面要有哪些功能呢 1.有条件部输入查询条件(这个不打算做成共通的

单篇文章JS模拟分页

废话部分 前两天做了一个前台分页插件,支持ajax读取数据绑定前台 和 url带页码参数跳转两种方式.于是稍加改动,做了一个单篇文章js模拟分页的代码,为什么说是模拟分页呢?因为在服务器响应HTML请求的时候,就已经把全文回传给客户端了,只是我们通过js的方式,把全文隐藏,每次翻页至显示出我们需要的那一部分,而不是真正的按需要去发出HTML请求.所以,在做这个插件的时候去掉了ajax请求的功能及其附带参数,去掉了pageSize参数(恒等于1).这里就不讨论具体的技术细节了和上一篇的分页计算原理

thinkphp自定义分页效果

TP自带了一个分页函数,挺方便使用的. 下面是我的使用方法: 1 /*****************分页显示start*************************/ 2 $arr_page=$this->page($user,1); 3 $show=$arr_page['show']; 4 $Page=$arr_page['Page']; 5 $article = $user->order('now')->limit($Page->firstRow.','.$Page-&g

NET Core-TagHelper实现分页标签

1.继承父类TagHelper并重写Process方法(这里还有一个异步的方法ProcessAsync各位可以自己尝试下) 2.注意:怎么在试图页面使用自定义标签 3.注意:怎么识别标签中的属性 4.注意:自定义标签类怎么获取分页参数 5.效果展示 下面一步一个脚印的来分享: 1.继承父类TagHelper并重写Process方法(这里还有一个异步的方法ProcessAsync各位可以自己尝试下) 首先咋们定义一个类取名为PagerTagHelper,这里需要继承TagHelper类,重写Pro