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 相关文章推荐
MySQL连接数超过限制的解决方法
Jul 17 PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
Oct 23 PHP
php实现的短网址算法分享
Jun 20 PHP
php中strtotime函数用法详解
Nov 15 PHP
php模拟登陆的实现方法分析
Jan 09 PHP
Yii获取当前url和域名的方法
Jun 08 PHP
php注册登录系统简化版
Dec 28 PHP
Symfony2学习笔记之模板用法详解
Mar 17 PHP
降低PHP Redis内存占用
Mar 23 PHP
kindeditor 加入七牛云上传的实例讲解
Nov 12 PHP
PHP chop()函数讲解
Feb 11 PHP
TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法
Jun 03 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
星际中的相关伤害
2020/03/04 星际争霸
php smarty的预保留变量总结
2008/12/04 PHP
window+nginx+php环境配置 附配置搭配说明
2010/12/29 PHP
Laravel框架实现多数据库连接操作详解
2019/07/12 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
爆炸式的JS圆形浮动菜单特效代码
2010/03/03 Javascript
关于js中window.location.href,location.href,parent.location.href,top.location.href的用法与区别
2010/10/18 Javascript
javascript 实现 秒杀,团购 倒计时展示的记录 分享
2013/07/12 Javascript
12个超实用的JQuery代码片段
2015/11/02 Javascript
javascript制作照片墙及制作过程中出现的问题
2016/04/04 Javascript
自制微信公众号一键排版工具
2016/09/22 Javascript
Angularjs 动态改变title标题(兼容ios)
2016/12/29 Javascript
Ionic 2 实现列表滑动删除按钮的方法
2017/01/22 Javascript
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
javascript中如何判断类型汇总
2019/05/14 Javascript
Javascript Dom元素获取和添加详解
2019/09/24 Javascript
vue表单中遍历表单操作按钮的显示隐藏示例
2019/10/30 Javascript
[03:27]《辉夜杯》线下训练营 导师CU和海涛指点迷津
2015/10/23 DOTA
Python+django实现简单的文件上传
2016/08/17 Python
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
python命令行参数用法实例分析
2019/06/25 Python
python 并发编程 阻塞IO模型原理解析
2019/08/20 Python
python下载的库包存放路径
2020/07/27 Python
pandas实现导出数据的四种方式
2020/12/13 Python
python中用Scrapy实现定时爬虫的实例讲解
2021/01/18 Python
Python3利用openpyxl读写Excel文件的方法实例
2021/02/03 Python
美国孩之宝玩具官网:Hasbro Pulse
2019/06/24 全球购物
网络维护管理员的自我评价分享
2013/11/11 职场文书
幼儿园六一儿童节活动方案
2014/08/26 职场文书
纪律教育学习月活动总结
2014/08/27 职场文书
创先争优活动承诺书
2014/08/30 职场文书
2014年乡镇民政工作总结
2014/12/02 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
CSS3实现360度循环旋转功能
2022/02/12 HTML / CSS
《极主夫道》真人电影正式预告 定档6月3日上映
2022/04/05 日漫
win10如何开启ahci模式?win10开启ahci模式详细操作教程
2022/07/23 数码科技