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加密解密类代码
Nov 27 PHP
关于UEditor编辑器远程图片上传失败的解决办法
Aug 31 PHP
php环境套包 dedeampz 伪静态设置示例
Mar 26 PHP
使用PHP函数scandir排除特定目录
Jun 12 PHP
PHP实现对文本数据库的常用操作方法实例演示
Jul 04 PHP
smarty中js的调用方法示例
Oct 27 PHP
PHP生成指定随机字符串的简单实现方法
Apr 01 PHP
详解PHP数组赋值方法
Nov 07 PHP
PHP+Ajax验证码验证用户登录
Jul 20 PHP
php生成与读取excel文件
Oct 14 PHP
Centos7 Yum安装PHP7.2流程教程详解
Jul 02 PHP
基于ThinkPHP删除目录及目录文件函数
Oct 28 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
怎样在UNIX系统下安装php3
2006/10/09 PHP
PHP排序之二维数组的按照字母排序实现代码
2011/08/13 PHP
PHP中soap的用法实例
2014/10/24 PHP
用javascript实现读取txt文档的脚本
2007/07/20 Javascript
javascript比较文档位置
2008/04/08 Javascript
从盛大通行证上摘下来的身份证验证js代码
2011/01/11 Javascript
jQuery写的日历(包括日历的样式及功能)
2013/04/23 Javascript
解析jQuery的三种bind/One/Live事件绑定使用方法
2013/12/30 Javascript
JS实现的论坛Ajax打分效果完整实例
2015/10/31 Javascript
Bootstrap每天必学之折叠
2016/04/12 Javascript
js获取html的span标签的值方法(超简单)
2016/07/26 Javascript
运用js教你轻松制作html音乐播放器
2020/04/17 Javascript
Vue.js实现无限加载与分页功能开发
2016/11/03 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
关闭Vue计算属性自带的缓存功能方法
2018/03/02 Javascript
深入理解react-router 路由的实现原理
2018/09/26 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
2018/11/30 Javascript
webpack自动打包和热更新的实现方法
2019/06/24 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
Python 实现网页自动截图的示例讲解
2018/05/17 Python
Python二元赋值实用技巧解析
2019/10/25 Python
python如何通过twisted搭建socket服务
2020/02/03 Python
PyQt5-QDateEdit的简单使用操作
2020/07/12 Python
pycharm中leetcode插件使用图文详解
2020/12/07 Python
关于解决iframe标签嵌套问题的解决方法
2020/03/04 HTML / CSS
机械制造与自动化应届生求职信
2013/11/16 职场文书
七一党建活动方案
2014/01/28 职场文书
总经理的岗位职责
2014/02/23 职场文书
地陪导游欢迎词
2015/01/26 职场文书
如何写通讯稿
2015/07/22 职场文书
售房协议书范本
2015/08/11 职场文书
2016年春季开学典礼新闻稿
2015/11/25 职场文书
《圆的周长》教学反思
2016/02/17 职场文书
MySQL时区造成时差问题
2022/04/13 MySQL
JavaScript中reduce()的用法
2022/05/11 Javascript
VUE递归树形实现多级列表
2022/07/15 Vue.js