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 FPDF类库应用实现代码
Mar 20 PHP
php 遍历数据表数据并列表横向排列的代码
Sep 05 PHP
PHP 文件系统详解
Sep 13 PHP
php页面缓存ob系列函数介绍
Oct 18 PHP
php类中private属性继承问题分析
Nov 01 PHP
解析PHP自带的进位制之间的转换函数
Jun 08 PHP
解析PHP中的正则表达式以及模式匹配
Jun 19 PHP
PHP、Python和Javascript的装饰器模式对比
Feb 03 PHP
yii权限控制的方法(三种方法)
Dec 28 PHP
PHP实现小偷程序实例
Oct 31 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
Mar 08 PHP
Yii2框架中一些折磨人的坑
Dec 15 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
curl和libcurl的区别简介
2015/07/01 PHP
WordPress中查询文章的循环Loop结构及用法分析
2015/12/17 PHP
php+resumablejs实现的分块上传 断点续传功能示例
2017/04/18 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
2017/08/03 PHP
laravel 实现用户登录注销并限制功能
2019/10/24 PHP
关于jquery append() html时的小问题的解决方法
2010/12/16 Javascript
uploadify 3.0 详细使用说明
2012/06/18 Javascript
javascript面向对象入门基础详细介绍
2012/09/05 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
实例详解jQuery表单验证插件validate
2016/01/18 Javascript
jQuery xml字符串的解析、读取及查找方法
2016/03/01 Javascript
详解JavaScript异步编程中jQuery的promise对象的作用
2016/05/03 Javascript
详解angularJs模块ui-router之状态嵌套和视图嵌套
2017/04/28 Javascript
js使用i18n实现页面国际化的方法
2017/05/09 Javascript
微信小程序—setTimeOut定时器的问题及解决
2019/07/26 Javascript
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
Python使用BeautifulSoup库解析HTML基本使用教程
2016/03/31 Python
关于Tensorflow中的tf.train.batch函数的使用
2018/04/24 Python
python numpy 显示图像阵列的实例
2018/07/02 Python
Python 把序列转换为元组的函数tuple方法
2019/06/27 Python
python实现连连看辅助之图像识别延伸
2019/07/17 Python
python函数不定长参数使用方法解析
2019/12/14 Python
Python基于pygame实现单机版五子棋对战
2019/12/26 Python
python实现感知机模型的示例
2020/09/30 Python
webapp字号大小跟随系统字号大小缩放的示例代码
2018/12/26 HTML / CSS
英国最大的经认证的有机超市:Planet Organic
2018/02/02 全球购物
linux系统都有哪些运行级别
2012/04/15 面试题
质检部岗位职责
2013/11/11 职场文书
歌唱比赛获奖感言
2014/01/21 职场文书
上班打牌检讨书
2014/02/07 职场文书
珍惜资源保护环境的建议书
2014/05/14 职场文书
食堂厨师岗位职责
2014/08/25 职场文书
离职感谢信
2015/01/21 职场文书
市场部岗位职责
2015/02/12 职场文书
小学中队活动总结
2015/05/11 职场文书
Go调用Rust方法及外部函数接口前置
2022/06/14 Golang