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 相关文章推荐
java EJB 加密与解密原理的一个例子
Jan 11 PHP
深入理解PHP原理之异常机制
Aug 21 PHP
PHP版网站缓存加快打开速度的方法分享
Jun 03 PHP
wordpress自定义url参数实现路由功能的代码示例
Nov 28 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
php动态函数调用方法
May 21 PHP
深入探究PHP的多进程编程方法
Aug 18 PHP
php字符串操作针对负值的判断分析
Jul 28 PHP
PHP中SQL查询语句的id=%d解释(推荐)
Dec 10 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
Nov 21 PHP
php如何计算两坐标点之间的距离
Dec 29 PHP
PHP利用递归函数实现无限级分类的方法
Mar 22 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
php模拟js函数unescape的函数代码
2012/10/20 PHP
ubuntu下配置nginx+php+mysql详解
2015/09/10 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
extjs 初始化checkboxgroup值的代码
2011/09/21 Javascript
如何将php数组或者对象传递给javascript
2014/03/20 Javascript
使用jQuery重置(reset)表单的方法
2014/05/05 Javascript
JavaScript声明变量时为什么要加var关键字
2014/09/29 Javascript
javascript常用方法总结
2015/05/14 Javascript
谈谈我对JavaScript DOM事件的理解
2015/12/18 Javascript
深入探秘jquery瀑布流的实现
2016/01/30 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
2016/05/20 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
JS实现留言板功能
2017/06/17 Javascript
微信小程序开发之animation循环动画实现的让云朵飘效果
2017/07/14 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
JavaScript变量类型以及变量作用域详解
2017/08/14 Javascript
如何理解Vue的作用域插槽的实现原理
2017/08/19 Javascript
原生js实现下拉选项卡
2019/11/27 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
vue+element实现图片上传及裁剪功能
2020/06/29 Javascript
python中的一些类型转换函数小结
2013/02/10 Python
Python实现获取网站PR及百度权重
2015/01/21 Python
Python构造函数及解构函数介绍
2015/02/26 Python
python实现m3u8格式转换为mp4视频格式
2018/02/28 Python
python 自动批量打开网页的示例
2019/02/21 Python
docker-py 用Python调用Docker接口的方法
2019/08/30 Python
python图形开发GUI库wxpython使用方法详解
2020/02/14 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
python自定义函数def的应用详解
2020/06/03 Python
自然健康的概念:Natural Healthy Concepts
2020/01/26 全球购物
高职教师先进事迹材料
2014/08/24 职场文书
Python实现视频自动打码的示例代码
2022/04/08 Python
MySQL数据库如何查看表占用空间大小
2022/06/10 MySQL