yii 分页功能实现

本文使用时,分页类在yii框架中以组件的形式存在于components中。

action代码如下:

[php]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. public function actionIndex(){       
  2.         $user=User::model();  
  3.   
  4.         //分页的使用  
  5.         $count=$user->count(); //获取总页数  
  6.         $pagesize=3;   //每一页显示的记录条数  
  7.         $page=new Page($count,$pagesize);  
  8.         $sql="select * from {{user}} $page->limit";  
  9.         $info=$user->findAllBySql($sql);  
  10.         $show_page=$page->fpage();  
  11.         $this->renderPartial("index",array("info"=>$info,'show_page'=>$show_page));  
  12.     }  


在view页面,遍历info即可获取信息,输出show_page即可显示分页列表等信息。

现附上page.PHP代码如下:

[php]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. <?php  
  2. /** 
  3.  * 分页类,以组件形式存在于componnets文件中 
  4.  */  
  5. class Page {  
  6.         private $total//数据表中总记录数  
  7.         private $listRows//每页显示行数  
  8.         private $limit;  
  9.         private $uri;  
  10.         private $pageNum//页数  
  11.         private $config=array('header'=>"个记录""prev"=>"上一页""next"=>"下一页""first"=>"首 页""last"=>"尾 页");  
  12.         private $listNum=8;  
  13.         /* 
  14.          * $total  
  15.          * $listRows 
  16.          */  
  17.         public function __construct($total$listRows=10, $pa=""){  
  18.             $this->total=$total;  
  19.             $this->listRows=$listRows;  
  20.             $this->uri=$this->getUri($pa);  
  21.             $this->page=!empty($_GET["page"]) ? $_GET["page"] : 1;  
  22.             $this->pageNum=ceil($this->total/$this->listRows);  
  23.             $this->limit=$this->setLimit();  
  24.         }  
  25.   
  26.         private function setLimit(){  
  27.             return "Limit ".($this->page-1)*$this->listRows.", {$this->listRows}";  
  28.         }  
  29.   
  30.         private function getUri($pa){  
  31.             $url=$_SERVER["REQUEST_URI"].(strpos($_SERVER["REQUEST_URI"], '?')?'':"?").$pa;  
  32.             $parse=parse_url($url);  
  33.             if(isset($parse["query"])){  
  34.                 parse_str($parse['query'],$params);  
  35.                 unset($params["page"]);  
  36.                 $url=$parse['path'].'?'.http_build_query($params);  
  37.             }  
  38.             return $url;  
  39.         }  
  40.   
  41.         function __get($args){  
  42.             if($args=="limit")  
  43.                 return $this->limit;  
  44.             else  
  45.                 return null;  
  46.         }  
  47.   
  48.         private function start(){  
  49.             if($this->total==0)  
  50.                 return 0;  
  51.             else  
  52.                 return ($this->page-1)*$this->listRows+1;  
  53.         }  
  54.   
  55.         private function end(){  
  56.             return min($this->page*$this->listRows,$this->total);  
  57.         }  
  58.   
  59.         private function first(){  
  60.                         $html='';  
  61.             if($this->page==1)  
  62.                 $html.='';  
  63.             else  
  64.                 $html.="  <a href='{$this->uri}&page=1'>{$this->config["first"]}</a>  ";  
  65.   
  66.             return  $html;  
  67.         }  
  68.   
  69.         private function prev(){  
  70.                         $html='';  
  71.             if($this->page==1)  
  72.                 $html.='';  
  73.             else  
  74.                 $html.="  <a href='{$this->uri}&page=".($this->page-1)."'>{$this->config["prev"]}</a>  ";  
  75.   
  76.             return $html;  
  77.         }  
  78.   
  79.         private function pageList(){  
  80.             $linkPage="";     
  81.             $inum=floor($this->listNum/2);         
  82.             for($i=$inum$i>=1; $i--){  
  83.                 $page=$this->page-$i;  
  84.                 if($page<1)  
  85.                     continue;  
  86.                 $linkPage.=" <a href='{$this->uri}&page={$page}'>{$page}</a> ";  
  87.             }         
  88.             $linkPage.=" {$this->page} ";              
  89.             for($i=1; $i<=$inum$i++){  
  90.                 $page=$this->page+$i;  
  91.                 if($page<=$this->pageNum)  
  92.                     $linkPage.=" <a href='{$this->uri}&page={$page}'>{$page}</a> ";  
  93.                 else  
  94.                     break;  
  95.             }  
  96.             return $linkPage;  
  97.         }  
  98.   
  99.         private function next(){  
  100.                         $html='';  
  101.             if($this->page==$this->pageNum)  
  102.                 $html.='';  
  103.             else  
  104.                 $html.="  <a href='{$this->uri}&page=".($this->page+1)."'>{$this->config["next"]}</a>  ";  
  105.   
  106.             return $html;  
  107.         }  
  108.   
  109.         private function last(){  
  110.                         $html='';  
  111.             if($this->page==$this->pageNum)  
  112.                 $html.='';  
  113.             else  
  114.                 $html.="  <a href='{$this->uri}&page=".($this->pageNum)."'>{$this->config["last"]}</a>  ";  
  115.             return $html;  
  116.         }  
  117.   
  118.         private function goPage(){  
  119.             return '  <input type="text" οnkeydοwn="javascript:if(event.keyCode==13){var page=(this.value>'.$this->pageNum.')?'.$this->pageNum.':this.value;location=\''.$this->uri.'&page=\'+page+\'\'}" value="'.$this->page.'" style="width:25px"><input type="button" value="GO" οnclick="javascript:var page=(this.previousSibling.value>'.$this->pageNum.')?'.$this->pageNum.':this.previousSibling.value;location=\''.$this->uri.'&page=\'+page+\'\'">  ';  
  120.         }  
  121.         function fpage($display=array(0,1,2,3,4,5,6,7,8)){  
  122.             $html[0]="  共有<b>{$this->total}</b>{$this->config["header"]}  ";  
  123.             $html[1]="  每页显示<b>".($this->end()-$this->start()+1)."</b>条,本页<b>{$this->start()}-{$this->end()}</b>条  ";  
  124.             $html[2]="  <b>{$this->page}/{$this->pageNum}</b>页  ";              
  125.             $html[3]=$this->first();  
  126.             $html[4]=$this->prev();  
  127.             $html[5]=$this->pageList();  
  128.             $html[6]=$this->next();  
  129.             $html[7]=$this->last();  
  130.             $html[8]=$this->goPage();  
  131.             $fpage='';  
  132.             foreach($display as $index){  
  133.                 $fpage.=$html[$index];  
  134.             }  
  135.             return $fpage;  
  136.         }     
  137.     }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值