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 ; 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="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); } }