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 相关文章推荐
shopex主机报错误请求解决方案(No such file or directory)
Dec 27 PHP
codeigniter中测试通过的分页类示例
Apr 17 PHP
教你如何解密 “ PHP 神盾解密工具 ”
Jun 20 PHP
ThinkPHP之R方法实例详解
Jun 20 PHP
CI框架验证码CAPTCHA辅助函数用法实例
Nov 05 PHP
php在linux下检测mysql同步状态的方法
Jan 15 PHP
php计算两个文件相对路径的方法
Mar 14 PHP
php获取远程文件内容的函数
Nov 02 PHP
php获取ajax的headers方法与内容实例
Dec 27 PHP
PHP生成(支持多模板)二维码海报代码
Apr 30 PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
Jan 10 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
Apr 09 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创建PDF中文文档
2006/10/09 PHP
PHP curl模拟浏览器采集阿里巴巴的实现代码
2011/04/20 PHP
PHP会话处理的10个函数
2015/08/11 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
javascript动态添加表格数据行(ASP后台数据库保存例子)
2010/05/08 Javascript
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
JavaScript异步编程:异步数据收集的具体方法
2013/08/19 Javascript
JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
2014/10/17 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
JS实现漂亮的淡蓝色滑动门效果代码
2015/09/23 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
2015/12/05 Javascript
Javascript小技能总结(推荐)
2016/06/02 Javascript
jQuery autoComplete插件两种使用方式及动态改变参数值的方法详解
2016/10/24 Javascript
js中的闭包实例展示
2018/11/01 Javascript
es6中比较有用的7个技巧小结
2019/07/12 Javascript
nodejs文件夹深层复制功能
2019/09/03 NodeJs
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
如何基于javascript实现贪吃蛇游戏
2020/02/09 Javascript
vue addRoutes路由动态加载操作
2020/08/04 Javascript
Vue.js暴露方法给WebView的使用操作
2020/09/07 Javascript
[01:19]2014DOTA2国际邀请赛 采访TITAN战队ohaiyo 能赢DK很幸运
2014/07/12 DOTA
[02:49]2014DOTA2电竞也是体育项目! 势要把荣誉带回中国!
2014/07/20 DOTA
[06:53]2018DOTA2国际邀请赛寻真——勇于创新的Vici Gaming
2018/08/14 DOTA
[01:32]dota2拉比克至宝(222)
2018/12/20 DOTA
python模拟登陆阿里妈妈生成商品推广链接
2014/04/03 Python
Python object类中的特殊方法代码讲解
2020/03/06 Python
python3中sorted函数里cmp参数改变详解
2020/03/12 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
2020/07/13 Python
C++:局部变量能否和全局变量重名
2014/03/03 面试题
武汉瑞得软件笔试题
2015/10/27 面试题
音乐系毕业生自荐信
2013/10/27 职场文书
网络营销策划方案
2014/06/04 职场文书
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书
煤矿安全生产工作总结
2015/08/13 职场文书
爱国教育主题班会
2015/08/14 职场文书
游戏《铁拳》动画化!2022年年内播出
2022/03/21 日漫