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中for与foreach的区别分析
Mar 09 PHP
php按百分比生成缩略图的代码分享
May 10 PHP
php使用正则过滤js脚本代码实例
May 10 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
Dec 19 PHP
PHP上传文件参考配置大文件上传
Dec 16 PHP
php使用正则验证中文
Apr 06 PHP
Yii2前后台分离及migrate使用(七)
May 04 PHP
php利用gd库为图片添加水印
Nov 09 PHP
ThinkPHP简单使用memcache缓存的方法
Nov 15 PHP
PHP PDOStatement::getColumnMeta讲解
Feb 01 PHP
yii2 在控制器中验证请求参数的使用方法
Jun 19 PHP
实例讲解PHP表单
Jun 10 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
晶体管单管来复再生式收音机
2021/03/02 无线电
PHP处理excel cvs表格的方法实例介绍
2013/05/13 PHP
php使用event扩展的io复用测试的示例
2020/10/20 PHP
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
jQuery实现仿百度帖吧头部固定导航效果
2015/08/07 Javascript
JavaScript实现简单Tip提示框效果
2016/04/20 Javascript
JS 实现Base64编码与解码实例详解
2016/11/07 Javascript
使用jquery实现的循环连续可停顿滚动实例
2016/11/23 Javascript
纯js实现页面返回顶部的动画(超简单)
2017/08/10 Javascript
js 两数组去除重复数值的实例
2017/12/06 Javascript
微信小程序自定义组件实现tabs选项卡功能
2018/07/14 Javascript
细说Vue组件的服务器端渲染的过程
2019/05/30 Javascript
js实现登录时记住密码的方法分析
2020/04/05 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
2020/05/29 Javascript
layui实现显示数据表格、搜索和修改功能示例
2020/06/03 Javascript
如何在postman测试用例中实现断言过程解析
2020/07/09 Javascript
在vue中使用Echarts画曲线图的示例
2020/10/03 Javascript
小程序实现tab标签页
2020/11/16 Javascript
微信小程序视频弹幕发送功能的实现
2020/12/28 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
Python迭代和迭代器详解
2016/11/10 Python
Python操作qml对象过程详解
2019/09/26 Python
使用Python获取当前工作目录和执行命令的位置
2020/03/09 Python
Python3+selenium实现cookie免密登录的示例代码
2020/03/18 Python
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
naturalizer加拿大官网:美国娜然女鞋
2017/04/04 全球购物
美国保健品专家:Life Extension
2018/05/04 全球购物
中国一家综合的外贸B2C电子商务网站:DealeXtreme(DX)
2020/03/10 全球购物
如何写你的创业计划书
2014/01/07 职场文书
干部培训自我鉴定
2014/01/22 职场文书
《老王》教学反思
2014/02/23 职场文书
十岁生日答谢词
2015/01/05 职场文书
迎新年主持词
2015/07/06 职场文书
Nginx源码编译安装过程记录
2021/11/17 Servers