牛骨文教育服务平台(让学习变的简单)
博文笔记

yii 10种分页

创建时间:2016-11-23 投稿人: 浏览次数:153

一、

  1. class LinkPage extends CLinkPager  
  2. {  
  3.     public function run()  
  4.     {  
  5.         $pageLinks = $this->createPagePreAndNext();  
  6.         $topPage = CHtml::tag("div"array("class"=>"topPage"), $pageLinks);  
  7.         $form = $this->createForm();  
  8.         $toPage = CHtml::tag("div"array("class"=>"toPage"), $form);  
  9.         echo CHtml::tag("div"array("class"=>"page"), $topPage.$toPage);  
  10.     }  
  11.     /** 
  12.      * @desc 创建向前和向后的链接 
  13.      * @return string a标签和span标签的html代码 
  14.      */  
  15.     private function createPagePreAndNext()  
  16.     {  
  17.         $links = "";  
  18.         if ($this->pages->getCurrentPage()>=1) {  
  19.             $links .= CHtml::link($this->prevPageLabel, $this->createPageUrl($this->pages->getCurrentPage()-1), array("class"=>"prePage"));  
  20.         } elseif (0 == $this->pages->getCurrentPage()) {  
  21.             $links .= CHtml::tag("span"array("class"=>"prePage"), $this->prevPageLabel);  
  22.         }  
  23.         $links .= CHtml::tag("span"array("class"=>"pageNum"), $this->pages->getCurrentPage()+1 . "/" . ($this->pages->getPageCount()?$this->pages->getPageCount():1));  
  24.         if ($this->pages->getCurrentPage()+1 < $this->pages->getPageCount()) {  
  25.             $links .= CHtml::link($this->nextPageLabel, $this->createPageUrl($this->pages->getCurrentPage()+1), array("class"=>"pgNxt"));  
  26.         } elseif($this->pages->getCurrentPage()+1 >= $this->pages->getPageCount()) {  
  27.             $links .= CHtml::tag("span"array("class"=>"pgNxt"), $this->nextPageLabel);  
  28.         }  
  29.         return $links;  
  30.     }  
  31.     /** 
  32.      * @desc 创建跳转表单 
  33.      * @return string form的html代码 
  34.      */  
  35.     private function createForm()  
  36.     {  
  37.         $form = "";  
  38.         $url = $this->createPageUrl(0);  
  39.         $form .= CHtml::beginForm($url"get");  
  40.         $form .= CHtml::tag("span"array(), "跳转到");  
  41.         $form .= CHtml::textField("page"""array("class"=>"pageIn"));  
  42.         $form .= CHtml::tag("span"array(), "页");  
  43.         $form .= CHtml::tag("input"array("type"=>"submit""class"=>"pageSubBtn""value"=>"确定"));  
  44.         $form .= CHtml::endForm();  
  45.         return $form;  
  46.     }  
  47.     /** 
  48.      * @desc 创建分页url链接 
  49.      * @param int $page  链接指向的页数 
  50.      * @return string   url链接 
  51.      */  
  52.     public function createPageUrl($page)  
  53.     {  
  54.         if (is_null($this->pages->params)) {  
  55.             $this->pages->params = $_GET;  
  56.             foreach($this->pages->params as $key=>$value){  
  57.                 if (stripos($key"/") || stripos($key"\")) {//去掉键中包含有 / 或者  的param  
  58.                     unset($this->pages->params[$key]);  
  59.                 }  
  60.             }  
  61.         }  
  62.         return $this->pages->createPageUrl($this->getController(), $page);  
  63.     }  

二、

  1. class ListLinkPage extends CLinkPager  
  2. {  
  3.     public $listNum = 8;  
  4.     public $pageArr = array();  
  5.     public $startPage;  
  6.     public $endPage;  
  7.     public function run()  
  8.     {  
  9.         $this->listArr();  
  10.         $code  = $this->makeListHtml();  
  11.         $code .= $this->makePrevAndNext();  
  12.         echo $code;  
  13.     }  
  14.     public function getListNum()  
  15.     {  
  16.         return $this->listNum;  
  17.     }  
  18.     public function setListNum($num)  
  19.     {  
  20.         is_numeric($num) && $this->listNum = intval($num);  
  21.     }  
  22.     /** 
  23.      * 计算链接的起始和结束位置 
  24.      */  
  25.     private function listArr()  
  26.     {  
  27.         //计算数字下标,当前页标之前需要显示多少个下标 和  当前页标之后需要显示多少个下标  
  28.         $back    = ceil(($this->listNum - 1)/2);  
  29.         $pageNow = $this->pages->getCurrentPage() + 1;  
  30.         $count   = $this->pages->getPageCount();  
  31.         $this->endPage   = ($pageNow+$back>$count)?$count:$pageNow+$back;  
  32.         $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)));  
  33.         ($this->endPage-$this->startPage < $this->listNum - 1) && $this->endPage = $this->listNum - $this->startPage + 1;  
  34.     }  
  35.     /** 
  36.      * 生成上一页和下一页的html代码 
  37.      */  
  38.     private function makePrevAndNext()  
  39.     {  
  40.         $htmlcode = "";  
  41.         (($this->pages->getCurrentPage()<=0) && ($htmlcode .= CHtml::tag("span"array(), $this->prevPageLabel))) || ($htmlcode .= CHtml::link($this->prevPageLabel, ""array()));  
  42.         (($this->pages->getCurrentPage()+1 < $this->pages->getPageCount()) && ($htmlcode .= CHtml::link($this->nextPageLabel, ""array()))) || ($htmlcode .= CHtml::tag("span"array(), $this->nextPageLabel));  
  43.         return $htmlcode;  
  44.     }  
  45.     /** 
  46.      * 生成列表链接的html代码 
  47.      * @return string 
  48.      */  
  49.     private function makeListHtml()  
  50.     {  
  51.         $htmlCode = "";  
  52.         for($step=$this->startPage;$step<=$this->endPage;$step++){  
  53.             (($step == $this->pages->getCurrentPage()+1) && ($htmlCode .= CHtml::tag("strong"array(), $step))) || ($htmlCode .= CHtml::link($step""array()));  
  54.         }  
  55.         return $htmlCode;  
  56.     }  

三、

  1. class pageList extends CLinkPager  
  2. {  
  3.     private $signEmBefore= false;  
  4.     private $signEmAfter = false;  
  5.     private $pageStart;  
  6.     private $pageEnd;  
  7.     private $pageNow;  
  8.     private $pageCount;  
  9.     private $pageShowCount=7;  
  10.     private $pagePosition=3;  
  11.   
  12.     public function run()  
  13.     {  
  14.         $this->pageNow = $this->pages->getCurrentPage()+1;  
  15.         $this->pageCount = $this->pages->getPageCount();  
  16.         0==$this->pagePosition && $this->pagePosition = 1;  
  17.         if ($this->pagePosition >= $this->pageShowCount) {  
  18.             echo "参数设置不合理";  
  19.             return ;  
  20.         }  
  21.         $this->makeSign();  
  22.         echo $this->makeHtml();  
  23.     }  
  24.     /** 
  25.      * 计算标记位置 
  26.      */  
  27.     public function makeSign()  
  28.     {  
  29.         if ($this->pageCount>$this->pageShowCount) {  
  30.             $this->pageStart = $this->pageNow-$this->pagePosition+1;  
  31.             ($this->pageStart < 2 && $this->pageStart = 2) || $this->signEmBefore = true;  
  32.             $this->pageEnd   = $this->pageShowCount+$this->pageStart-3;  
  33.             ($this->pageEnd >= $this->pageCount-1 && $this->pageEnd = $this->pageCount-1) || $this->signEmAfter = true;  
  34.             ($this->pageEnd-$this->pageShowCount+3 >= 2) && $this->pageStart = $this->pageEnd-$this->pageShowCount+3;  
  35.         } else {  
  36.             $this->pageEnd = $this->pageCount-1;  
  37.             $this->pageStart = 2;  
  38.         }  
  39.     }  
  40.     /** 
  41.      * 生成分页代码 
  42.      * @return [type] [description] 
  43.      */  
  44.     private function makeHtml()  
  45.     {  
  46.         $html = "";  
  47.         $html .= CHtml::tag("div"array("class"=>"page"), false);  
  48.         $html .= CHtml::tag("div"array("class"=>"topPage"), false);  
  49.         $html .= $this->makeLinkHtml();  
  50.         $html .= CHtml::closeTag("div");  
  51.         $html .= CHtml::tag("div"array("class"=>"toPage"), false);  
  52.         $html .= $this->createForm();  
  53.         $html .= CHtml::closeTag("div");  
  54.         $html .= CHtml::closeTag("div");  
  55.         return $html;  
  56.     }  
  57.     /** 
  58.      * 生成html代码 
  59.      * @return string 分页代码 
  60.      */  
  61.     public function makeLinkHtml()  
  62.     {  
  63.         $htmlCode = "";  
  64.         if (1==$this->pageNow) {  
  65.             $htmlCode .= CHtml::tag("span"array("class"=>"prePage"), $this->prevPageLabel);  
  66.             $htmlCode .= CHtml::tag("div"array("class"=>"pagaNumBox"), false);  
  67.             $htmlCode .= CHtml::tag("strong"array(), 1);  
  68.         } else {  
  69.             $htmlCode .= CHtml::link($this->prevPageLabel, $this->createPageUrl($this->pageNow-1), array("class"=>"prePage"));  
  70.             $htmlCode .= CHtml::tag("div"array("class"=>"pagaNumBox"), false);  
  71.             $htmlCode .= CHtml::link(1, $this->createPageUrl(1), array());  
  72.         }  
  73.         if ($this->signEmBefore) {  
  74.             $htmlCode .= CHtml::tag("em"array(), "...");  
  75.         }  
  76.         for($step=$this->pageStart;$step<=$this->pageEnd;$step++){  
  77.             if ($step==$this->pageNow) {  
  78.                 $htmlCode .= CHtml::tag("strong"array(), $step);  
  79.             } else {  
  80.                 $htmlCode .= CHtml::link($step$this->createPageUrl($step), array());  
  81.             }  
  82.         }  
  83.         if ($this->signEmAfter) {  
  84.             $htmlCode .= CHtml::tag("em"array(), "...");  
  85.         }  
  86.         if ($this->pageCount==$this->pageNow) {  
  87.             $this->pageEnd>0 && $htmlCode .= CHtml::tag("strong"array(), $this->pageCount);  
  88.             $htmlCode .= CHtml::closeTag("div");  
  89.             $htmlCode .= CHtml::tag("span"array("class"=>"pgNxt"), $this->nextPageLabel);  
  90.         } else {  
  91.             $this->pageEnd>0 && $htmlCode .= CHtml::link($this->pageCount, $this->createPageUrl($this->pageCount), array());  
  92.             $htmlCode .= CHtml::closeTag("div");  
  93.             $htmlCode .= CHtml::link($this->nextPageLabel, $this->createPageUrl($this->pageNow+1), array("class"=>"pgNxt"));  
  94.         }  
  95.         return $htmlCode;  
  96.     }  
  97.     /** 
  98.      * @desc 创建跳转表单 
  99.      * @return string form的html代码 
  100.      */  
  101.     private function createForm()  
  102.     {  
  103.         $form = "";  
  104.         $url = $this->createPageUrl(0);  
  105.         $form .= CHtml::beginForm($url"get");  
  106.         $form .= CHtml::tag("span"array(), "跳转到");  
  107.         $form .= CHtml::textField("page"""array("class"=>"pageIn"));  
  108.         $form .= CHtml::tag("span"array(), "页");  
  109.         $form .= CHtml::tag("input"array("type"=>"submit""class"=>"pageSubBtn""value"=>"确定"));  
  110.         $form .= CHtml::endForm();  
  111.         return $form;  
  112.     }  
  113.     /** 
  114.      * @desc 创建分页url链接 
  115.      * @param int $page  链接指向的页数 
  116.      * @return string   url链接 
  117.      */  
  118.     protected function createPageUrl($page)  
  119.     {  
  120.         if (is_null($this->pages->params)) {  
  121.             $this->pages->params = $_GET;  
  122.             foreach($this->pages->params as $key=>$value){  
  123.                 if (stripos($key"/") || stripos($key"\")) {//去掉键中包含有 / 或者  的param  
  124.                     unset($this->pages->params[$key]);  
  125.                 }  
  126.             }  
  127.         }  
  128.         return $this->pages->createPageUrl($this->getController(), --$page);  
  129.     }  

第一种:CListView分页  针对对象形式的数据分页Controller:代码如下:
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。