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 相关文章推荐
一键删除顽固的空文件夹 软件下载
Jan 26 PHP
php下删除字符串中HTML标签的函数
Aug 27 PHP
php 取得瑞年与平年的天数的代码
Aug 10 PHP
检测png图片是否完整的php代码
Sep 06 PHP
PHP中for与foreach的区别分析
Mar 09 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
Jan 10 PHP
PHP实现生成唯一会员卡号
Aug 24 PHP
利用PHP如何写APP接口详解
Aug 23 PHP
phpMyAdmin无法登陆的解决方法
Apr 27 PHP
php使用curl下载指定大小的文件实例代码
Sep 30 PHP
PDO::_construct讲解
Jan 27 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 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
ThinkPHP让分页保持搜索状态的方法
2014/07/02 PHP
PHP简单判断字符串是否包含另一个字符串的方法
2016/03/25 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
2016/09/11 PHP
编写高效jQuery代码的4个原则和5个技巧
2014/04/24 Javascript
关于javascript模块加载技术的一些思考
2014/11/28 Javascript
jquery使用hide方法隐藏指定id的元素
2015/03/30 Javascript
jquery拖拽排序简单实现方法(效果增强版)
2016/02/16 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
js中json处理总结之JSON.parse
2016/10/14 Javascript
详解React 16 中的异常处理
2017/07/28 Javascript
Node.js  事件循环详解及实例
2017/08/06 Javascript
ES7中利用Await减少回调嵌套的方法详解
2017/11/01 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
2017/11/12 Javascript
js input输入百分号保存数据库失败的解决方法
2018/05/26 Javascript
微信小程序使用gitee进行版本管理
2018/09/20 Javascript
微信小程序 点击切换样式scroll-view实现代码实例
2019/10/11 Javascript
Vue简单实现原理详解
2020/05/07 Javascript
vue动画—通过钩子函数实现半场动画操作
2020/08/09 Javascript
如何在 Vue 表单中处理图片
2021/01/26 Vue.js
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
[01:54]TI4西雅图DOTA2选手欢迎晚宴 现场报道
2014/07/08 DOTA
实例讲解Python中global语句下全局变量的值的修改
2016/06/16 Python
python 打印对象的所有属性值的方法
2016/09/11 Python
Python动态生成多维数组的方法示例
2018/08/09 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
Django模型中字段属性choice使用说明
2020/03/30 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
2020/05/16 Python
python利用appium实现手机APP自动化的示例
2021/01/26 Python
军用级手机壳,专为冒险而建:Zizo Wireless
2019/08/07 全球购物
super关键字的用法
2012/04/10 面试题
居委会个人对照检查材料思想汇报
2014/09/29 职场文书
师德承诺书
2015/01/20 职场文书
2015年城市管理工作总结
2015/05/23 职场文书
尼克胡哲观后感
2015/06/08 职场文书
小学校长开学致辞
2015/07/29 职场文书
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers