以下是本人原创,如若转载和使用请注明转载地址。本博客信息切勿用于商业,可以个人使用,若喜欢我的博客,请关注我,谢谢!博客地址

下面这段代码是从官网上翻译过来的,介绍了分页的用例

1
2
3
4
5
6
7
8
9
10
11
12
13
public function list()
{
$this->load->library('pagination');//加载分页类
$config['base_url'] = base_url().'index.php/main/list';//设置基地址
$config['uri_segment']=3;//设置url上第几段用于传递分页器的偏移量
$config['total_rows'] = $this->db->count_all('db_list');//自动从数据库中取得total_row信息
$config['per_page'] = 10; //每页显示的数据数量
$this->pagination->initialize($config); //设置完成分页器
$this->load->library('table');//加载表格类
$query=$this->db->get('my_list',$config['per_page'],$this->uri->segment(3));//这一行代码是关键!是pagination与table结合的关键.per_page告诉此次sql查询限制数量,uri_segment告诉此次查询的偏移量(从哪一行数据开始查询).
echo $this->table->generate($query);//显示查询到的数据
echo $this->pagination->create_links();//显示分页器
}

可以看出其中使用到了一些配置文件,在pagination.php文件中 ​下面我们看看这个文件的详细内容,如果你的文件和这个不同的话,可以复制进去。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
 
define('PER_PAGE', 1);
 
$config['per_page'] = PER_PAGE;
$config['num_links'] = 2;
$config['first_link'] = "首页";
$config['last_link'] = "末页";
$config['first_tag_open'] = '<div>';
$config['first_tag_close'] = '</div>';
$config['last_tag_open'] = '<div>';
$config['last_tag_close'] = '</div>';

之后才是我们的正式的核心内容

这个是页面的链接,用于显示首次加载的情形。

1
<li><a href="<?=base_url();?>index.php/admin/info/showAll" target="mainFrame"><span>信息管理</span></a></li>

之后我们就需要到控制层去找showAll函数了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public function showAll(){
        $table = 'ts_product';
        $num = $this->traceInfo_model->getNumByTable($table);
//      echo $num;
//      $arr['totalNum'] = $num;
        $offset = $this->uri->segment(4);
        $arr['traceData'] = $this->getTraces($offset);
        //使用分页器进行分页
        $config['base_url'] = base_url().'index.php/admin/info/showAll';//设置基地址
        $config['uri_segment']=4;//设置url上第几段用于传递分页器的偏移量
        $config['total_rows'] = $num;//自动从数据库中取得total_row信息
        $config['per_page'] = 1; //每页显示的数据数量
        $this->pagination->initialize($config); //设置完成分页器
        $arr['page'] = $this->pagination->create_links();
 
        $this->load->view('admin/subject/information_show_all',$arr);
    }

其中showAll函数调用了getTraces($offset)函数,用于获取每次我们点击页面时的不同的页,下面是此函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 分页获取全部课题信息
       public function getTraces($offset){
           $data = array();
           //调用model层的获取数据的函数
           $result = $this->traceInfo_model->getTracesTable($data, PER_PAGE, $offset);
 
           foreach ($result as $r){
               $arr = array(
                   'product_tracecode' => $r->product_tracecode,
                   'product_name' => $r->product_name,
                   'product_inputtime' => $r->product_inputtime,
                   'product_inputuser' => $r->product_inputuser
                   );
               array_push($data, $arr);
           }
           return $data;
       }

此时我们会去调用model层的函数,去获得数据库的数据,其中$this->traceInfo_model->getTracesTable就是调用model层的函数。

1
2
3
4
5
6
7
8
9
/**
 * 处理分页的函数
 */
function getTracesTable($array, $per_page, $offset){
    $this->db->select();
    $this->db->where($array);
    $q = $this->db->get('ts_product', $per_page, $offset);
    return $q->result();
}

这个函数用的是CI框架提供的数据库操作语句,其中$this->db->get('ts_product'$per_page$offset);第一个参数就是我们数据库中的表名称,其他的都很好理解。最难理解的是offset表示从哪一行数据开始查询。


这里我所不知道的是 如果有两个表关联,怎么办呢?我们还需要使用这个CI提供的数据库操作语句吗?也就是这里的where该怎么写呢?请教请教啊???

感谢您支持我的博客,我的动力是您的支持和关注!如若转载和使用请注明转载地址,并且请尊重劳动成果,谢谢!

CI分页器pagination的原理及实现的更多相关文章

  1. 《CI/CD 流程以及原理说明》

    自动化部署 CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法.CI/CD 的核心概念是持续集成.持续交付和持续部署.作为一个面向开发和运营团队的解决方案,CI/CD 主要针对在 ...

  2. swiper 自定义分页器的使用

    网上关于swiper 自定义分页器的方法比较多,但是已经不适合使用.它的API又比较坑爹,什么都是点到为止,不说清楚.因为要做一个产品颜色切换的效果,有黑与白两种颜色,因此尝试使用Swiper的自定义 ...

  3. 物联网架构成长之路(47)-利用GitLab实现CI持续集成

    0.前言 前段时间,考虑到要练习部署一套CI/CD的系统.一开始考虑到Jenkins,随着这两天的了解,发现最新版的GitLab已经提供有CI/CD集成了.所以本次博客,干脆一步到位,直接用GitLa ...

  4. GitLab CI/CD的官译【原】

    CI / CD方法简介 软件开发的持续集成基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性.从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预. 它涉及在每次小迭代中不断 ...

  5. Swiper+ ejs模板引擎+ iScroll插件知识总结

    一. Swiper swiper是一个应用于移动端的动画插件,原理类似于轮播图 官网 http://www.swiper.com.cn/# html结构 <div class="swi ...

  6. React实现一个简易版Swiper

    背景 最近在公司内部进行一个引导配置系统的开发中,需要实现一个多图轮播的功能.到这时很多同学会说了,"那你直接用swiper不就好了吗?".但其实是,因为所有引导的展示都是作为np ...

  7. swiper的初步使用

    1.引入文件,顺序引入(此处基于jquery,且版本至少1.7以上) <link rel="stylesheet" href="path/to/swiper-3.4 ...

  8. 轮播神器swiper插件

    Swiper中文网:http://www.swiper.com.cn/ Swiper- 是免费的,最现代化的移动触摸滑块硬件加速的转换和惊人的天然行为.它的目的是在移动网站,移动网络应用和移动本地/混 ...

  9. Swiper教程 —— 使用方法

    Swiper使用方法 1.首先加载插件,需要用到的文件有swiper.min.js和swiper.min.css文件. <!DOCTYPE html> <html> <h ...

随机推荐

  1. 【dp】 比较经典的dp poj 1160

    转自http://blog.sina.com.cn/s/blog_5dd8fece0100rq7d.html [题目大意]:用数轴描述一条高速公路,有V个村庄,每一个村庄坐落在数轴的某个点上,需要选择 ...

  2. \t 的理解

    在同一个缓冲区内横向跳8个空格. 如果在 \t 前面有字符串,则包括 \t之前出现的字符串之内一共是8个空格.

  3. POJ 3468<线段树,区间add>

    题目连接 //位运算 k<<1 相当于 k*2 k<<1|1 相当于 k*2+1 /* 修改区间内的值,并且维护区间和. 详见代码 */ #include<cstdio& ...

  4. Android中如何将Bitmap byte裸数据转换成Bitmap图片int数据

    Android中如何将Bitmap byte裸数据转换成Bitmap图片int数据 2014-06-11 10:45:14   阅读375次 我们在JNI中处理得到的BMP图片Raw数据,我们应该如何 ...

  5. [转]动态添加Fragments

    本章节翻译自<Beginning-Android-4-Application-Development>,如有翻译不当的地方,敬请指出. 原书购买地址http://www.amazon.co ...

  6. JS-DOM操作应用高级(三)

    appendChild   1.先把元素从原有的父级上删除    2.添加到新的父级 <title>无标题文档</title> <script> window.on ...

  7. Python基础学习3---数据结构

    数据结构 数据结构基本上就是---他们是可以处理数据的结构或者说他们是用来存储一组相关数据的. 在python中有三种内建的数据结构-----列表.元组和字典 列表(list) 列表就像是我们要去超市 ...

  8. maven认识

    在这里普及一下知识: ┣ maven与ant是同类,构建工具 ┣ svn与cvs,css是同类,版本控制工具 1.为什么要用Maven? 在进行软件开发的过程中,无论什么项目,采用何种技术,使用何种编 ...

  9. js实现类似于add(1)(2)(3)调用方式的方法

    群里有人说实现类似add(1)(2)(3)调用方式的方法,结果马上有人回答: var add = function(a){ return function(b){ return function(c) ...

  10. EF在单例模式及C/S方式开发时,操作数据对象以后如果发生异常,要做善后工作。

    try{ 删除或修改 }catch { _DBContext.Refresh(RefreshMode.StoreWins, entity); }