yii 10种分页
一、
- 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);
- }
- }
- 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;
- }
- }
- 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);
- }
- }
第一种:CListView分页 针对对象形式的数据分页Controller:代码如下:
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
copyright © 2008-2019 亿联网络 版权所有 备案号:粤ICP备14031511号-2