【Yii框架】YII分页组件
2014-07-03 08:19
302 查看
No. 1
效果:
代码:
class LinkPage extends CLinkPager { public function run() { $pageLinks = $this->createPagePreAndNext(); $topPage = CHtml::tag('div', array('class'=>'topPage'), $pageLinks); $form = $this->createForm(); $toPage = CHtml::tag('div', array('class'=>'toPage'), $form); echo CHtml::tag('div', array('class'=>'page'), $topPage.$toPage); } /** * @desc 创建向前和向后的链接 * @return string a标签和span标签的html代码 */ private function createPagePreAndNext() { $links = ''; if ($this->pages->getCurrentPage()>=1) { $links .= CHtml::link($this->prevPageLabel, $this->createPageUrl($this->pages->getCurrentPage()-1), array('class'=>'prePage')); } elseif (0 == $this->pages->getCurrentPage()) { $links .= CHtml::tag('span', array('class'=>'prePage'), $this->prevPageLabel); } $links .= CHtml::tag('span', array('class'=>'pageNum'), $this->pages->getCurrentPage()+1 . '/' . ($this->pages->getPageCount()?$this->pages->getPageCount():1)); if ($this->pages->getCurrentPage()+1 < $this->pages->getPageCount()) { $links .= CHtml::link($this->nextPageLabel, $this->createPageUrl($this->pages->getCurrentPage()+1), array('class'=>'pgNxt')); } elseif($this->pages->getCurrentPage()+1 >= $this->pages->getPageCount()) { $links .= CHtml::tag('span', array('class'=>'pgNxt'), $this->nextPageLabel); } return $links; } /** * @desc 创建跳转表单 * @return string form的html代码 */ private function createForm() { $form = ''; $url = $this->createPageUrl(0); $form .= CHtml::beginForm($url, 'get'); $form .= CHtml::tag('span', array(), '跳转到'); $form .= CHtml::textField('page', '', array('class'=>'pageIn')); $form .= CHtml::tag('span', array(), '页'); $form .= CHtml::tag('input', array('type'=>'submit', 'class'=>'pageSubBtn', 'value'=>'确定')); $form .= CHtml::endForm(); return $form; } /** * @desc 创建分页url链接 * @param int $page 链接指向的页数 * @return string url链接 */ public function createPageUrl($page) { if (is_null($this->pages->params)) { $this->pages->params = $_GET; foreach($this->pages->params as $key=>$value){ if (stripos($key, '/') || stripos($key, '\\')) {//去掉键中包含有 / 或者 \ 的param unset($this->pages->params[$key]); } } } return $this->pages->createPageUrl($this->getController(), $page); } }
No. 2
效果:
注:这里总数不一定是八页,可以指定显示的连接页数,这里指定的是八页。
代码:
class ListLinkPage extends CLinkPager { public $listNum = 8; public $pageArr = array(); public $startPage; public $endPage; public function run() { $this->listArr(); $code = $this->makeListHtml(); $code .= $this->makePrevAndNext(); echo $code; } public function getListNum() { return $this->listNum; } public function setListNum($num) { is_numeric($num) && $this->listNum = intval($num); } /** * 计算链接的起始和结束位置 */ private function listArr() { //计算数字下标,当前页标之前需要显示多少个下标 和 当前页标之后需要显示多少个下标 $back = ceil(($this->listNum - 1)/2); $pageNow = $this->pages->getCurrentPage() + 1; $count = $this->pages->getPageCount(); $this->endPage = ($pageNow+$back>$count)?$count:$pageNow+$back; $this->startPage = ($pageNow+$back>$count)?(($count-$this->listNum)<1?1:($count-$this->listNum+1)):(($pageNow-$back+(($this->listNum%2)^1))<1?1:($pageNow-$back+(($this->listNum%2)^1))); ($this->endPage-$this->startPage < $this->listNum - 1) && $this->endPage = $this->listNum - $this->startPage + 1; } /** * 生成上一页和下一页的html代码 */ private function makePrevAndNext() { $htmlcode = ''; (($this->pages->getCurrentPage()<=0) && ($htmlcode .= CHtml::tag('span', array(), $this->prevPageLabel))) || ($htmlcode .= CHtml::link($this->prevPageLabel, '', array())); (($this->pages->getCurrentPage()+1 < $this->pages->getPageCount()) && ($htmlcode .= CHtml::link($this->nextPageLabel, '', array()))) || ($htmlcode .= CHtml::tag('span', array(), $this->nextPageLabel)); return $htmlcode; } /** * 生成列表链接的html代码 * @return string */ private function makeListHtml() { $htmlCode = ''; for($step=$this->startPage;$step<=$this->endPage;$step++){ (($step == $this->pages->getCurrentPage()+1) && ($htmlCode .= CHtml::tag('strong', array(), $step))) || ($htmlCode .= CHtml::link($step, '', array())); } return $htmlCode; } }
注:这两个里面的 $this->pages 都是Yii 中 CPagination类的实例。
No. 3
效果:
代码:
class pageList extends CLinkPager { private $signEmBefore= false; private $signEmAfter = false; private $pageStart; private $pageEnd; private $pageNow; private $pageCount; private $pageShowCount=7; private $pagePosition=3; public function run() { $this->pageNow = $this->pages->getCurrentPage()+1; $this->pageCount = $this->pages->getPageCount(); 0==$this->pagePosition && $this->pagePosition = 1; if ($this->pagePosition >= $this->pageShowCount) { echo '参数设置不合理'; return ; } $this->makeSign(); echo $this->makeHtml(); } /** * 计算标记位置 */ public function makeSign() { if ($this->pageCount>$this->pageShowCount) { $this->pageStart = $this->pageNow-$this->pagePosition+1; ($this->pageStart < 2 && $this->pageStart = 2) || $this->signEmBefore = true; $this->pageEnd = $this->pageShowCount+$this->pageStart-3; ($this->pageEnd >= $this->pageCount-1 && $this->pageEnd = $this->pageCount-1) || $this->signEmAfter = true; ($this->pageEnd-$this->pageShowCount+3 >= 2) && $this->pageStart = $this->pageEnd-$this->pageShowCount+3; } else { $this->pageEnd = $this->pageCount-1; $this->pageStart = 2; } } /** * 生成分页代码 * @return [type] [description] */ private function makeHtml() { $html = ''; $html .= CHtml::tag('div', array('class'=>'page'), false); $html .= CHtml::tag('div', array('class'=>'topPage'), false); $html .= $this->makeLinkHtml(); $html .= CHtml::closeTag('div'); $html .= CHtml::tag('div', array('class'=>'toPage'), false); $html .= $this->createForm(); $html .= CHtml::closeTag('div'); $html .= CHtml::closeTag('div'); return $html; } /** * 生成html代码 * @return string 分页代码 */ public function makeLinkHtml() { $htmlCode = ''; if (1==$this->pageNow) { $htmlCode .= CHtml::tag('span', array('class'=>'prePage'), $this->prevPageLabel); $htmlCode .= CHtml::tag('div', array('class'=>'pagaNumBox'), false); $htmlCode .= CHtml::tag('strong', array(), 1); } else { $htmlCode .= CHtml::link($this->prevPageLabel, $this->createPageUrl($this->pageNow-1), array('class'=>'prePage')); $htmlCode .= CHtml::tag('div', array('class'=>'pagaNumBox'), false); $htmlCode .= CHtml::link(1, $this->createPageUrl(1), array()); } if ($this->signEmBefore) { $htmlCode .= CHtml::tag('em', array(), '...'); } for($step=$this->pageStart;$step<=$this->pageEnd;$step++){ if ($step==$this->pageNow) { $htmlCode .= CHtml::tag('strong', array(), $step); } else { $htmlCode .= CHtml::link($step, $this->createPageUrl($step), array()); } } if ($this->signEmAfter) { $htmlCode .= CHtml::tag('em', array(), '...'); } if ($this->pageCount==$this->pageNow) { $this->pageEnd>0 && $htmlCode .= CHtml::tag('strong', array(), $this->pageCount); $htmlCode .= CHtml::closeTag('div'); $htmlCode .= CHtml::tag('span', array('class'=>'pgNxt'), $this->nextPageLabel); } else { $this->pageEnd>0 && $htmlCode .= CHtml::link($this->pageCount, $this->createPageUrl($this->pageCount), array()); $htmlCode .= CHtml::closeTag('div'); $htmlCode .= CHtml::link($this->nextPageLabel, $this->createPageUrl($this->pageNow+1), array('class'=>'pgNxt')); } return $htmlCode; } /** * @desc 创建跳转表单 * @return string form的html代码 */ private function createForm() { $form = ''; $url = $this->createPageUrl(0); $form .= CHtml::beginForm($url, 'get'); $form .= CHtml::tag('span', array(), '跳转到'); $form .= CHtml::textField('page', '', array('class'=>'pageIn')); $form .= CHtml::tag('span', array(), '页'); $form .= CHtml::tag('input', array('type'=>'submit', 'class'=>'pageSubBtn', 'value'=>'确定')); $form .= CHtml::endForm(); return $form; } /** * @desc 创建分页url链接 * @param int $page 链接指向的页数 * @return string url链接 */ protected function createPageUrl($page) { if (is_null($this->pages->params)) { $this->pages->params = $_GET; foreach($this->pages->params as $key=>$value){ if (stripos($key, '/') || stripos($key, '\\')) {//去掉键中包含有 / 或者 \ 的param unset($this->pages->params[$key]); } } } return $this->pages->createPageUrl($this->getController(), --$page); } }
相关文章推荐
- YII框架组件CListView实现分页
- Yii框架扩展JInputElement【输入元素组件】
- 关于js框架 dwz 与 yii的的分页 以及筛选的结合
- 电子商务系统的设计与实现(十):DWZ框架与第三方分页组件整合
- yii分页组件用法实例分析
- 从Yii框架分页数据“丢失”到MySQL的ORDER BY和LIMIT子句
- Yii框架表单组件配置参数说明
- 详解PHP的Yii框架中组件行为的属性注入和方法注入
- 电子商务系统的设计与实现(十):DWZ框架与第三方分页组件整合
- 电子商务系统的设计与实现(十):DWZ框架与第三方分页组件整合
- PHP的Yii框架中移除组件所绑定的行为的方法
- YII 框架 第六天(1) YII和分页
- yii框架分页的实现
- Yii框架下配置最新版yii-bootstrap组件
- Yii框架官方教程增补篇6——基础知识:应用、组件、配置、生命周期
- YII框架分析笔记2:组件和事件行为管理
- Yii 框架中的常用组件调用
- yii框架中分页url重写rewrite达到各参数变伪静态链接,即不出现?和&的参数
- dwz框架分页组件使用
- PHP的Yii框架中移除组件所绑定的行为的方法