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

本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《php优秀开发框架总结》、《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《Zend FrameWork框架入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

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

(0)

相关推荐

  • CodeIgniter分页类pagination使用方法示例

    本文实例讲述了CodeIgniter分页类pagination使用方法.分享给大家供大家参考,具体如下: controller控制器(application/controller/page.php文件): public function index() { $this->load->model ( 'home_model' , '' , TRUE); $config= array(); $config['per_page'] = $this->per_page; //每页显示的数据数 $

  • CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解

    CodeIgniter 是一个小巧但功能强大的 PHP 框架,作为一个简单而"优雅"的工具包,它可以为开发者们建立功能完善的 Web 应用程序.是比较主流的一个PHP框架. 下面给大家介绍CI框架(ajax分页,全选,反选,不选,批量删除)完整代码,具体代码如下所示: //ajax分页+搜索(视图层) function ajax_page(page){ var sou = $('#sou').val(); $.ajax({ type: "POST", dataTyp

  • Codeigniter(CI)框架分页函数及相关知识

    一般在数据分页的时候需要获取当前页的数据和总条数,一般人是在model中封装两个函数分别获取当前页的数据和数据总条数,业务逻辑类似,感觉有点冗余,可以封装在一起: 复制代码 代码如下: /**      * 获取分页数据及总条数      * @param string @tablename 表名      * @param mixed $where 条件      * @param int $limit 每页条数      * @param int $offset 当前页      */   

  • PHP CodeIgniter分页实例及多条件查询解决方案(推荐)

    最近在用CI框架的时候,用了CI的分页类,以前是用前端整分页,这次干脆用用框架自带的,自己这个健忘的脑袋,还是记录一下吧. 因为页面中有条件筛选的表单,所以想要完成的效果就是,输入条件后,分页跳转之后能维持所输入的条件.想了一下,自己的思路如下代码吧. controller 代码 class Monitors extends CI_Controller { public function warning(){ $config= array(); $config['per_page'] = 15;

  • CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)

    本文实例总结了CI框架常用经典操作类.分享给大家供大家参考,具体如下: 1. 超级对象中的URI CI_URI类的解析url的相关信息 直接使用$this->uri可以使用它的相关属性 system/core/URI.php文件中 部分常用属性: (1) 分段获取url相关信息 $this->uri->segment(4); //获取url中pathinfo //的第四段的值 入口文件.php/控制器/动作/参数1/参数2/... (2) 通过方法中的形参传参 需要设默认值和顺序要注意

  • Codeigniter框架实现获取分页数据和总条数的方法

    本文实例讲述了Codeigniter框架实现获取分页数据和总条数的方法.分享给大家供大家参考.具体实现方法如下: 一般在数据分页的时候需要获取当前页的数据和总条数,一般人是在model中封装两个函数分别获取当前页的数据和数据总条数,业务逻辑类似,感觉有点冗余,可以封装在一起 复制代码 代码如下: /** * 获取分页数据及总条数 * @param string @tablename 表名 * @param mixed $where 条件 * @param int $limit 每页条数 * @p

  • codeigniter实现get分页的方法

    本文实例讲述了codeigniter实现get分页的方法.分享给大家供大家参考.具体实现方法如下: public function project_search(){ $this->load->library('pagination'); $this->load->model('depart_mdl'); //获取搜索需要的信息 $data = $this->get_project_data(); $get_data = $this->input->get();

  • codeigniter中测试通过的分页类示例

    通用分页类(以Codeigniter测试) page_list.php 复制代码 代码如下: <?php if( ! defined('BASEPATH')) die('No Access'); /** * 分页类 */class Page_list { /**     * 总数据     * @var int     */    private $total;    /**     * 每页显示数据     * @var int     */    private $size;    /** 

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

    本文实例讲述了CI框架简单分页类用法.分享给大家供大家参考,具体如下: /** * * 关于 页码有效性的判断需要加在 控制器中判断,即当页码数<1或者>总页数 * */ class Custom_pagination { var $page_url = ''; //分页目标URL var $page_size = 10; //每一页行数 var $page_num = 1;//页码 var $rows_num= '';//数据总行数 var $links_num= 3;//选中链接前后的链接

  • CI框架中zip类应用示例

    CI框架自带的zip类简单实用,本文就来简单说一下CI框架的zip类的使用. 首先需要导入zip类: 复制代码 代码如下: $this->load->('zip'); 此外,但是考虑到CI的结构,还需要设置一下自动加载类,把zip加载进去.也可以在设置的时候,统一加载.大家如果遇到这个问题可能就是自动加载没有加载zip类.具体调用方法如下: 复制代码 代码如下: $path = $_SERVER['DOCUMENT_ROOT'];//需要压缩的文件夹路径$this->zip->re

  • PHP实现的简单分页类及用法示例

    本文实例讲述了PHP实现的简单分页类及用法.分享给大家供大家参考,具体如下: <?php /* * 使用: * $page = new Page(连接符,查询语句,当前页码,每页大小,页码符) * 连接符:一个MYSQL连接标识符,如果该参数留空,则使用最近一个连接 * 查询语句:SQL语句 * 当前页码:指定当前是第几页 * 每页大小:每页显示的记录数 * 页码符:指定当前页面URL格式 * * 使用例子: * $sql = "select * from aa"; * $pag

  • CI框架简单邮件发送类实例

    本文实例讲述了CI框架简单邮件发送类.分享给大家供大家参考,具体如下: ci框架绝对是php初学中想要的东西,它能极大的缩短你的代码量! 下面看看我的发送邮件的简单演示: function email() { $this->load->library('email'); $config['protocol'] = 'smtp'; $config['smtp_host'] = 'smtp.163.com'; $config['smtp_user'] = 'jb51@163.com';//这里写上

  • Zend Framework分页类用法详解

    本文实例讲述了Zend Framework分页类用法.分享给大家供大家参考,具体如下: 1.分页类Pagination.php,最好是把这个类放在Zend目录下 class XY_Pagination { private $_navigationItemCount = 10; //导航栏显示导航总页数 private $_pageSize = null; //每页项目数 private $_align = "right"; //导航栏显示位置 private $_itemCount =

  • CI框架扩展系统核心类的方法分析

    本文实例讲述了CI框架扩展系统核心类的方法.分享给大家供大家参考,具体如下: 首先你系统扩展类是放在application/core下面的,本来系统核心类是CI_Controller,所以你不能以CI_开头了,你需要打开 application/config/config.php 修改: $config['subclass_prefix'] = 'MY_'; 为你的前缀! 一些公共的模块就可以卸载自己的核心类里面了! 这几天读了Dilicms(轻量级的后台架构),比如说他的后台扩展类是这样的:

  • php简单分页类实现方法

    本文实例讲述了php简单分页类实现方法.分享给大家供大家参考.具体如下: 复制代码 代码如下: class PageModel {      /**      * 获取分页数组      * @param unknown $page 当前页面数      * @param unknown $goodsCount 商品总数      * @param unknown $pageLength 每个页面展示页面数      */      public static function getPageA

  • bootstrap paginator分页前后台用法示例

    bootstrap paginator分页前后台用法示例,供大家参考,具体内容如下 准备工作: bootstrap-paginator.js 插件 github开源项目百度自行下载 引入js文件(JQuery1.8+bootstrap.min.js+bootstrap.css+bootstrap-paginator.js) <!--路径根据自己项目修改--> <link rel="stylesheet" href="/bootstrap/css/bootst

  • java编程scanner类用法示例

    在Eclipse中编写程序时,如果我们的变量是需要手动输入的时候,我们就可以用到scanner类了. Scanner类,这是一个用于扫描输入文本的新的实用程序.由于任何数据都必须通过同一模式的捕获组检索或通过使用一个索引来检索文本的各个部分.于是可以结合使用正则表达式和从输入流中检索特定类型数据项的方法.这样,除了能使用正则表达式之外,Scanner类还可以任意地对字符串和基本类型(如int和double)的数据进行分析.借助于Scanner,可以针对任何要处理的文本内容编写自定义的语法分析器.

  • thinkPHP框架单元测试库tpunit用法示例

    本文实例讲述了thinkPHP框架单元测试库tpunit用法.分享给大家供大家参考,具体如下: thinkphp本身并没有提供相应的单元测试支持,所以这里介绍一个可以对tp进行单元测试的库tpunit. Tpunit这个库是依赖于phpunit的,其特点是易用.方便和非入侵式. 使用TPUNIT很简单,只需要定义一个路径常量和导入要被测试的文件即可. Home模块下有个控制器如下: namespace Home\Controller; use Think\Controller; class In

随机推荐