CI框架简单分页类用法示例


Posted in PHP onJune 06, 2020

本文实例讲述了CI框架简单分页类用法。分享给大家供大家参考,具体如下:

/** 
 * 
 * 关于 页码有效性的判断需要加在 控制器中判断,即当页码数<1或者>总页数 
 * 
 */ 
class Custom_pagination 
{ 
  var $page_url = ''; //分页目标URL 
  var $page_size = 10; //每一页行数 
  var $page_num = 1;//页码 
  var $rows_num= '';//数据总行数 
  var $links_num= 3;//选中链接前后的链接数,必须大于等于1 
 
  var $anchor_class= '';//链接样式类 
  var $current_class= '';//当前页样式类 
  var $full_tag_open= '';//分页开始标签 
  var $full_tag_close= '';//分页结束标签 
  var $info_tag_open= ''; 
  var $info_tag_close= ' '; 
  var $first_tag_open= ''; 
  var $first_tag_close= ' '; 
  var $last_tag_open= ' '; 
  var $last_tag_close= ''; 
  var $cur_tag_open= ' <strong>'; 
  var $cur_tag_close= '</strong>'; 
  var $next_tag_open= ' '; 
  var $next_tag_close= ' '; 
  var $prev_tag_open= ' '; 
  var $prev_tag_close= ''; 
  var $num_tag_open= ' '; 
  var $num_tag_close= ''; 
 
  public function __construct($params = array()) 
  { 
    if (count($params) > 0) 
    { 
      $this->init($params); 
    } 
  } 
  
  function init($params = array()) //初始化数据 
  { 
    if (count($params) > 0) 
    { 
      foreach ($params as $key => $val) 
      { 
        if (isset($this->$key)) 
        { 
          $this->$key = $val; 
        } 
      } 
    } 
  } 
  
  function create_links() 
  { 
    /////////////////////////////////////////////////////// 
    //准备数据 
    /////////////////////////////////////////////////////// 
    $page_url = $this->page_url; 
    $rows_num = $this->rows_num; 
    $page_size = $this->page_size; 
    $links_num = $this->links_num; 
 
    if ($rows_num == 0 OR $page_size == 0) 
    { 
      return ''; 
    } 
 
    $pages = intval($rows_num/$page_size); 
    if ($rows_num % $page_size) 
    { 
      //有余数pages+1 
      $pages++; 
    }; 
    $page_num = $this->page_num < 1 ? '1' : $this->page_num; 
 
    $anchor_class = ''; 
    if($this->anchor_class !== '') 
    { 
      $anchor_class = 'class="'.$this->anchor_class.'" '; 
    } 
 
    $current_class = ''; 
    if($this->current_class !== '') 
    { 
      $current_class = 'class="'.$this->current_class.'" '; 
    } 
    if($pages == 1) 
    { 
      return ''; 
    } 
    if($links_num < 0) 
    { 
      return '- -!links_num必须大于等于0'; 
    } 
    //////////////////////////////////////////////////////// 
    //创建链接开始 
    //////////////////////////////////////////////////////// 
    $output = $this->full_tag_open; 
    $output .= $this->info_tag_open.'共'.$rows_num.'条数据 第 '.$page_num.'/'.$pages.' 页'.$this->info_tag_close; 
    //首页 
    if($page_num > 1) 
    { 
      $output .= $this->first_tag_open.'<a '.$anchor_class.' href="'.site_url($page_url).'" rel="external nofollow" >首页</a>'.$this->first_tag_close; 
    } 
    //上一页 
    if($page_num > 1) 
    { 
      $n = $page_num - 1; 
      $output .= $this->prev_tag_open.'<a '.$anchor_class.' href="'.site_url($page_url.'/'.$n).'" rel="external nofollow" rel="external nofollow" >上一页</a>'.$this->prev_tag_close; 
    } 
    //pages 
    for($i=1;$i<=$pages;$i++) 
    { 
      $pl = $page_num - $links_num < 0 ? 0 : $page_num - $links_num; 
      $pr = $page_num + $links_num > $pages ? $pages : $page_num + $links_num; 
      //判断链接个数是否太少,举例,假设links_num = 2,则链接个数不可少于 5 个,主要是 当page_num 等于 1, 2 和 n,n-1的时候 
      if($pr < 2 * $links_num + 1) 
      { 
        $pr = 2 * $links_num + 1; 
      } 
      if($pl > $pages-2 * $links_num) 
      { 
        $pl = $pages - 2 * $links_num; 
      } 
      if($i == $page_num) 
      {  //current page 
        $output .= $this->cur_tag_open.'<span '.$current_class.' >'.$i.'</span>'.$this->cur_tag_close; 
      }else if($i >= $pl && $i <= $pr) 
      { 
        $output .= $this->num_tag_open.'<a '.$anchor_class.' href="'.site_url($page_url.'/'.$i).'" rel="external nofollow" >'.$i.'</a>'.$this->num_tag_close; 
      } 
    } 
    //下一页 
    if($page_num < $pages) 
    { 
      $n = $page_num + 1; 
      $output .= $this->next_tag_open.'<a '.$anchor_class.' href="'.site_url($page_url.'/'.$n).'" rel="external nofollow" rel="external nofollow" >下一页</a>'.$this->next_tag_close; 
    } 
    //末页 
    if($page_num < $pages) 
    { 
      $output .= $this->last_tag_open.'<a '.$anchor_class.' href="'.site_url($page_url.'/'.$pages).'" rel="external nofollow" >末页</a>'.$this->last_tag_close; 
    } 
 
    $output.=$this->full_tag_close; 
    return $output; 
  } 
}

控制器里调用

$config['page_url'] 
= 'about/science'; 
$config['page_size'] = $pagesize; 
$config['rows_num'] = $num_rows; 
$config['page_num'] = $page; 
$this->load->library('Custom_pagination'); 
$this->custom_pagination->init($config); 
echo $this->custom_pagination->create_links();
<?php 
class page{ 
   
  public $page; //当前页 
  public $pagenum; // 页数 
  public $pagesize; // 每页显示条数 
  public function __construct($count, $pagesize){ 
    $this->pagenum = ceil($count/$pagesize); 
    $this->pagesize = $pagesize; 
    $this->page =(isset($_GET['p'])&&$_GET['p']>0) ? intval($_GET['p']) : 1; 
  } 
  /** 
   * 获得 url 后面GET传递的参数 
   */  
  public function getUrl(){   
    $url = 'index.php?'.http_build_query($_GET); 
    $url = preg_replace('/[?,&]p=(\w)+/','',$url); 
    $url .= (strpos($url,"?") === false) ? '?' : '&'; 
    return $url; 
  } 
  /** 
   * 获得分页HTML 
   */ 
  public function getPage(){ 
    $url = $this->getUrl(); 
    $start = $this->page-5; 
    $start=$start>0 ? $start : 1;  
    $end  = $start+9; 
    $end = $end<$this->pagenum ? $end : $this->pagenum; 
    $pagestr = ''; 
    if($this->page>5){ 
      $pagestr = "<a href=".$url." rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" p=1".">首页</a> "; 
    } 
    if($this->page!=1){ 
      $pagestr.= "<a href=".$url." rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" p=".($this->page-1).">上一页</a>"; 
    } 
     
    for($i=$start;$i<=$end;$i++){ 
      $pagestr.= "<a href=".$url." rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" p=".$i.">".$i."</a> ";            
    } 
    if($this->page!=$this->pagenum){ 
      $pagestr.="<a href=".$url." rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" p=".($this->page+1).">下一页</a>"; 
       
    } 
    if($this->page+5<$this->pagenum){ 
      $pagestr.="<a href=".$url." rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" p=".$this->pagenum.">尾页</a> "; 
    } 
    return $pagestr;   
  } 
   
} 
// 测试代码 
$page = new page(100,10); 
$str=$page->getPage(); 
echo $str; 
?>

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。

PHP 相关文章推荐
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
Apr 22 PHP
使用php统计字符串中中英文字符的个数
Jun 23 PHP
php微信支付之APP支付方法
Mar 04 PHP
PHP判断浏览器、判断语言代码分享
Mar 05 PHP
WordPress迁移时一些常见问题的解决方法整理
Nov 24 PHP
详解WordPress中添加和执行动作的函数使用方法
Dec 29 PHP
浅析php中array_map和array_walk的使用对比
Nov 20 PHP
使用ThinkPHP生成缩略图及显示
Apr 27 PHP
laravel学习笔记之模型事件的几种用法示例
Aug 15 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
May 12 PHP
Yii2框架自定义验证规则操作示例
Feb 08 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
Oct 18 PHP
简单的php购物车代码
Jun 05 #PHP
实例化php类时传参的方法分析
Jun 05 #PHP
PHP页面静态化――纯静态与伪静态用法详解
Jun 05 #PHP
PHP预定义接口――Iterator用法示例
Jun 05 #PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
Jun 05 #PHP
PHP标准库 (SPL)――Countable用法示例
Jun 05 #PHP
PHP类的自动加载与命名空间用法实例分析
Jun 05 #PHP
You might like
php实例分享之html转为rtf格式
2014/06/02 PHP
PHP使用静态方法的几个注意事项
2014/09/16 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
2015/09/30 PHP
提交表单后 PHP获取提交内容的实现方法
2016/05/25 PHP
PHP实现批量检测网站是否能够正常打开的方法
2016/08/23 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
javascript 图片上传预览-兼容标准
2009/06/01 Javascript
js chrome浏览器判断代码
2010/03/28 Javascript
JavaScript中判断函数是new还是()调用的区别说明
2011/04/07 Javascript
JQuery触发radio或checkbox的change事件
2012/12/18 Javascript
原生javascript实现匀速运动动画效果
2016/02/26 Javascript
js 判断一组日期是否是连续的简单实例
2016/07/11 Javascript
js图片上传前预览功能(兼容所有浏览器)
2016/08/24 Javascript
微信小程序 触控事件详细介绍
2016/10/17 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
2017/02/19 Javascript
详谈表单重复提交的三种情况及解决方法
2017/08/16 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
2017/11/20 Javascript
vue 进阶之实现父子组件间的传值
2019/04/26 Javascript
vue实现微信浏览器左上角返回按钮拦截功能
2020/01/18 Javascript
JavaScript语法约定和程序调试原理解析
2020/11/03 Javascript
python使用folium库绘制地图点击框
2018/09/21 Python
Python3多线程基础知识点
2019/02/19 Python
Python的高阶函数用法实例分析
2019/04/11 Python
计算机二级python学习教程(2) python语言基本语法元素
2019/05/16 Python
python保存字典和读取字典的实例代码
2019/07/07 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
2019/10/24 Python
TripAdvisor越南:全球领先的旅游网站
2017/09/21 全球购物
趣味体育活动方案
2014/02/08 职场文书
2014优秀党员事迹材料
2014/08/14 职场文书
给医院的感谢信
2015/01/21 职场文书
试用期旷工辞退通知书
2015/04/17 职场文书
大学生逃课检讨书
2015/05/04 职场文书
认识实习感想
2015/08/10 职场文书
JavaScript阻止事件冒泡的方法
2021/12/06 Javascript
Nginx文件已经存在全局反向代理问题排查记录
2022/07/15 Servers