作者:love四叶草health | 来源:互联网 | 2014-05-16 09:11
控制器中的代码:
$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仿淘宝在分页导航中实现跳转到指定分页功能》中详述。
有什么问题可以通过下面的回复框进行回复,我会第一时间回馈