Yii的分页方法收集

1.

DAO实现分页.
public function actionList() {
        $criteria=new CDbCriteria();
		$criteria->order=' id desc ';
		$criteria->select='id,pattern,replacement';
		//$criteria->addColumnCondition(array('com_id' => $user['com_id']));
		$count = FilterWord::model()->count($criteria);
		$pages=new CPagination($count);//实例化分页
		$pages->pageSize=3;//每页显示几条信息
$pages->setCurrentPage(Yii::app()->request->getParam('page',1)-1); //获取/设置当前页码,跳转到功能 $pages->applyLimit($criteria);//使用limit和offset $model=FilterWord::model()->findAll($criteria); $this->render('list',array( 'model'=>$model, 'pages'=>$pages, )); }

 

    <?php    
    
    $this->widget('CLinkPager',array(    
        'header'=>'',    
        'firstPageLabel' => '首页',    
        'lastPageLabel' => '末页',    
        'prevPageLabel' => '上一页',    
        'nextPageLabel' => '下一页',    
        'pages' => $pages,    
        'maxButtonCount'=>3        // 按钮数量
        )     
    );    
    ?>  跳转到:<form action="<?php echo Yii::app()->createUrl('filterword/list'); ?>" method="post">
	<input type="text" name="page" />         //name=page
	<input type="submit" value="提交" name="sub" />
	</form>

  

 

2.自定义样子小物件

1)视图中把下面放在分页位置

 <?php
                    $this->widget('PagerWidget', array(
                        'header' => '',
                        'firstPageLabel' => '第一页',
                        'lastPageLabel' => '最末页',
                        'prevPageLabel' => '上一页',
                        'nextPageLabel' => '下一页',
                        'pages' => $pager,
                        'selectedPageCssClass' => 'current',
                        'maxButtonCount' => 0,
                        'htmlOptions' => array('class' => 'fl pagination', 'id' => 'pagination')
                        )
                    );
                    ?>

  

		<style>          //加入css 给跳转按钮加背景图片
		.but_page {
                  background: url(../images/but_page.png) no-repeat;
                  margin-bottom: -4px\0;
                  width: 45px;
                  height: 21px;
                 border: none;
				 }
		</style>

控制器里面大致不变:

		$count = FilterWord::model()->count($criteria);
        $pageSize = (isset($_GET['pagesize']) && $_GET['pagesize']) ? $_GET['pagesize'] : 3;
        $pager = new CPagination($count);
        $pager->pageSize = $pageSize;
        $pager->applyLimit($criteria);      
		$model=FilterWord::model()->findAll($criteria);
        $this->render('list',array(
		'model'=>$model,
		'pager' => $pager,
		//'pages'=>$pages,

		));

 最关键一步是:在component文件夹里面加入PagerWidget.php文件(其实说白了就是对CLinkPager的改进版)....

<?php

class PagerWidget extends CBasePager {

    const CSS_FIRST_PAGE='first';
    const CSS_LAST_PAGE='last';
    const CSS_PREVIOUS_PAGE='previous';
    const CSS_NEXT_PAGE='next';
    const CSS_INTERNAL_PAGE='page';
    const CSS_HIDDEN_PAGE='hidden';
    const CSS_SELECTED_PAGE='selected';


    public $firstPageCssClass=self::CSS_FIRST_PAGE;

    public $lastPageCssClass=self::CSS_LAST_PAGE;

    public $previousPageCssClass=self::CSS_PREVIOUS_PAGE;
    /**
     * @var string the CSS class for the next page button. Defaults to 'next'.
     * @since 1.1.11
     */
    public $nextPageCssClass=self::CSS_NEXT_PAGE;

    public $internalPageCssClass=self::CSS_INTERNAL_PAGE;

    public $hiddenPageCssClass=self::CSS_HIDDEN_PAGE;

    public $selectedPageCssClass=self::CSS_SELECTED_PAGE;

    public $maxButtonCount=10;

    public $nextPageLabel;

    public $prevPageLabel;

    public $firstPageLabel;

    public $lastPageLabel;

    public $header;

    public $footer='';

    public $cssFile;

    public $htmlOptions=array();

    public $redirect = true;                                          //新加入跳转到功能
    
    public function init()
    {
        if($this->nextPageLabel===null)
            $this->nextPageLabel=Yii::t('yii','Next >');
        if($this->prevPageLabel===null)
            $this->prevPageLabel=Yii::t('yii','< Previous');
        if($this->firstPageLabel===null)
            $this->firstPageLabel=Yii::t('yii','<< First');
        if($this->lastPageLabel===null)
            $this->lastPageLabel=Yii::t('yii','Last >>');
        if($this->header===null)
            $this->header=Yii::t('yii','Go to page: ');

        if(!isset($this->htmlOptions['id']))
            $this->htmlOptions['id']=$this->getId();
        if(!isset($this->htmlOptions['class']))
            $this->htmlOptions['class']='yiiPager';
    }

    public function run()
    {
        $buttons=$this->createPageButtons();
        if(empty($buttons))
            return;
   
        $redirect = '';                                                               //这一步最关键
        if ($this->redirect) {
            $currentPage = $this->getCurrentPage()+1;
            $redirect=$this->createRedirect($currentPage);
        }

echo $this->header; echo CHtml::tag('div',$this->htmlOptions,implode("|",$buttons).$redirect); echo $this->footer; } protected function createPageButtons() { $pageCount=$this->getPageCount(); 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; } protected function createPageButton($label,$page,$class,$hidden,$selected) { if($hidden || $selected) $class.=' '.($hidden ? $this->hiddenPageCssClass : $this->selectedPageCssClass); $link = $selected ? $page+1 : CHtml::link($label,$this->createPageUrl($page)); return '<span class="'.$class.'">'.$link.'</span>'; } protected function createRedirect($page) //跳转到的视图 { $html = ' <span>跳转到第 <input type="text" class="input_s" style="width:30px; height:20px; line-height:20px;" id="input_page_redirect-'.Yii::app()->controller->id.'-'.Yii::app()->controller->action->id.'" value="'.$page.'"/> 页 <input type="button" id="but_redirect" class="but_page"></span> <script type="text/javascript"> $(".but_page").click(function(){ var page = $("#input_page_redirect-'.Yii::app()->controller->id.'-'.Yii::app()->controller->action->id.'").val(); var link = "'.$this->createPageUrl(0).'";//window.location.href; var url = ""; if (link.indexOf("page=")>0) { url = link.replace(/page=\d+/, "page="+page); } else { url = link+(link.indexOf("?")>0? "&page="+page : "?page="+page); } window.location = url; }); </script> '; return $html; } protected function getPageRange() { $currentPage=$this->getCurrentPage(); $pageCount=$this->getPageCount(); $beginPage=max(0, $currentPage-(int)($this->maxButtonCount/2)); if(($endPage=$beginPage+$this->maxButtonCount-1)>=$pageCount) { $endPage=$pageCount-1; $beginPage=max(0,$endPage-$this->maxButtonCount+1); } return array($beginPage,$endPage); } public function registerClientScript() { if($this->cssFile!==false) self::registerCssFile($this->cssFile); } public static function registerCssFile($url=null) { if($url===null) $url=CHtml::asset(Yii::getPathOfAlias('system.web.widgets.pagers.pager').'.css'); Yii::app()->getClientScript()->registerCssFile($url); } }

  

posted @ 2013-10-28 16:41  冯志强采桑子  阅读(552)  评论(0编辑  收藏  举报