yii分页组件用法实例分析

5年以前  |  阅读数:775 次  |  编程语言:PHP 

本文实例讲述了yii分页组件用法。分享给大家供大家参考,具体如下:

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

action代码如下:


    public function actionIndex(){
      $user=User::model();
      //分页的使用
      $count=$user->count(); //获取总页数
      $pagesize=3; //每一页显示的记录条数
      $page=new Page($count,$pagesize);
      $sql="select * from {{user}} $page->limit";
      $info=$user->findAllBySql($sql);
      $show_page=$page->fpage();
      $this->renderPartial("index",array("info"=>$info,'show_page'=>$show_page));
    }

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

现附上page.php代码如下:


    <?php
    /**
     * 分页类,以组件形式存在于componnets文件中
     */
    class Page {
      private $total; //数据表中总记录数
      private $listRows; //每页显示行数
      private $limit;
      private $uri;
      private $pageNum; //页数
      private $config=array('header'=>"个记录", "prev"=>"上一页", "next"=>"下一页", "first"=>"首 页", "last"=>"尾 页");
      private $listNum=8;
      /*
       * $total
       * $listRows
       */
      public function __construct($total, $listRows=10, $pa=""){
       $this->total=$total;
       $this->listRows=$listRows;
       $this->uri=$this->getUri($pa);
       $this->page=!empty($_GET["page"]) ? $_GET["page"] : 1;
       $this->pageNum=ceil($this->total/$this->listRows);
       $this->limit=$this->setLimit();
      }
      private function setLimit(){
       return "Limit ".($this->page-1)*$this->listRows.", {$this->listRows}";
      }
      private function getUri($pa){
       $url=$_SERVER["REQUEST_URI"].(strpos($_SERVER["REQUEST_URI"], '?')?'':"?").$pa;
       $parse=parse_url($url);
       if(isset($parse["query"])){
        parse_str($parse['query'],$params);
        unset($params["page"]);
        $url=$parse['path'].'?'.http_build_query($params);
       }
       return $url;
      }
      function __get($args){
       if($args=="limit")
        return $this->limit;
       else
        return null;
      }
      private function start(){
       if($this->total==0)
        return 0;
       else
        return ($this->page-1)*$this->listRows+1;
      }
      private function end(){
       return min($this->page*$this->listRows,$this->total);
      }
      private function first(){
          $html='';
       if($this->page==1)
        $html.='';
       else
        $html.=" <a href='{$this->uri}&page;=1'>{$this->config["first"]}</a> ";
       return $html;
      }
      private function prev(){
          $html='';
       if($this->page==1)
        $html.='';
       else
        $html.=" <a href='{$this->uri}&page;=".($this->page-1)."'>{$this->config["prev"]}</a> ";
       return $html;
      }
      private function pageList(){
       $linkPage="";
       $inum=floor($this->listNum/2);
       for($i=$inum; $i>=1; $i--){
        $page=$this->page-$i;
        if($page<1)
         continue;
        $linkPage.=" <a href='{$this->uri}&page;={$page}'>{$page}</a> ";
       }
       $linkPage.=" {$this->page} ";
       for($i=1; $i<=$inum; $i++){
        $page=$this->page+$i;
        if($page<=$this->pageNum)
         $linkPage.=" <a href='{$this->uri}&page;={$page}'>{$page}</a> ";
        else
         break;
       }
       return $linkPage;
      }
      private function next(){
          $html='';
       if($this->page==$this->pageNum)
        $html.='';
       else
        $html.=" <a href='{$this->uri}&page;=".($this->page+1)."'>{$this->config["next"]}</a> ";
       return $html;
      }
      private function last(){
          $html='';
       if($this->page==$this->pageNum)
        $html.='';
       else
        $html.=" <a href='{$this->uri}&page;=".($this->pageNum)."'>{$this->config["last"]}</a> ";
       return $html;
      }
      private function goPage(){
       return ' <input type="text" onkeydown="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" onclick="javascript:var page=(this.previousSibling.value>'.$this->pageNum.')?'.$this->pageNum.':this.previousSibling.value;location=\''.$this->uri.'&page;=\'+page+\'\'"> ';
      }
      function fpage($display=array(0,1,2,3,4,5,6,7,8)){
       $html[0]=" 共有<b>{$this->total}</b>{$this->config["header"]} ";
       $html[1]=" 每页显示<b>".($this->end()-$this->start()+1)."</b>条,本页<b>{$this->start()}-{$this->end()}</b>条 ";
       $html[2]=" <b>{$this->page}/{$this->pageNum}</b>页 ";
       $html[3]=$this->first();
       $html[4]=$this->prev();
       $html[5]=$this->pageList();
       $html[6]=$this->next();
       $html[7]=$this->last();
       $html[8]=$this->goPage();
       $fpage='';
       foreach($display as $index){
        $fpage.=$html[$index];
       }
       return $fpage;
      }
    }

希望本文所述对大家基于yii框架的PHP程序设计有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
发送邮件
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
提取后缀名
年的日历图
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例