yii分页组件用法实例分析


Posted in PHP onDecember 28, 2015

本文实例讲述了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 相关文章推荐
深入了解PHP类Class的概念
Jun 14 PHP
PHP静态调用非静态方法的应用分析
May 02 PHP
thinkphp 多表 事务详解
Jun 17 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
Jun 24 PHP
Php连接及读取和写入mysql数据库的常用代码
Aug 11 PHP
PHP 正则表达式小结
Feb 12 PHP
使用xampp搭建运行php虚拟主机的详细步骤
Oct 21 PHP
PHP getallheaders无法获取自定义头(headers)的问题
Mar 23 PHP
PHP-FPM运行状态的实时查看及监控详解
Nov 18 PHP
PHP 二维array转换json的实例讲解
Aug 21 PHP
laravel返回统一格式错误码问题
Nov 04 PHP
php实现微信小程序授权登录功能(实现流程)
Nov 13 PHP
PHP读取文件内容的五种方式
Dec 28 #PHP
yii用户注册表单验证实例
Dec 26 #PHP
PHP7之Mongodb API使用详解
Dec 26 #PHP
thinkPHP下的widget扩展用法实例分析
Dec 26 #PHP
thinkPHP下ueditor的使用方法详解
Dec 26 #PHP
thinkPHP中分页用法实例分析
Dec 26 #PHP
thinkPHP中验证码的简单使用方法
Dec 26 #PHP
You might like
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
基于php-fpm 参数的深入理解
2013/06/03 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
2015/12/31 PHP
深入研究PHP中的preg_replace和代码执行
2018/08/15 PHP
PHP基于cookie实现统计在线人数功能示例
2019/01/16 PHP
自定义jQuery选项卡插件实例
2013/03/27 Javascript
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
javascript和jquery实现用户登录验证
2016/05/04 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
2016/11/24 Javascript
Node.js使用orm2进行update操作时关联字段无法修改的解决方法
2017/06/13 Javascript
Vuejs 页面的区域化与组件封装的实现
2017/09/11 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
React BootStrap用户体验框架快速上手
2018/03/06 Javascript
详解react、redux、react-redux之间的关系
2018/04/11 Javascript
详解ESLint在Vue中的使用小结
2018/10/15 Javascript
js实现带箭头的进度流程
2020/03/26 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
2020/05/25 Javascript
深入讲解Python中面向对象编程的相关知识
2015/05/25 Python
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
通过python3实现投票功能代码实例
2019/09/26 Python
布隆过滤器的概述及Python实现方法
2019/12/08 Python
Python学习工具jupyter notebook安装及用法解析
2020/10/23 Python
HTML5之SVG 2D入门3—文本与图像及渲染文本介绍
2013/01/30 HTML / CSS
西班牙创意礼品和小工具网上商店:Curiosite
2016/07/26 全球购物
英国女性时尚品牌:Apricot
2018/12/04 全球购物
质检部经理岗位职责
2014/02/19 职场文书
重大事项社会稳定风险评估方案
2014/06/15 职场文书
企业趣味活动方案
2014/08/21 职场文书
社区党员公开承诺书
2014/08/30 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
单位综合评价意见
2015/06/05 职场文书
总结Pyinstaller打包的高级用法
2021/06/28 Python
Python中的 Set 与 dict
2022/03/13 Python
常用的文件对应的MIME类型汇总
2022/04/26 HTML / CSS