CI分页器pagination的原理及实现
下面这段代码是从官网上翻译过来的,介绍了分页的用例
|
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的原理及实现的更多相关文章
- 《CI/CD 流程以及原理说明》
自动化部署 CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法.CI/CD 的核心概念是持续集成.持续交付和持续部署.作为一个面向开发和运营团队的解决方案,CI/CD 主要针对在 ...
- swiper 自定义分页器的使用
网上关于swiper 自定义分页器的方法比较多,但是已经不适合使用.它的API又比较坑爹,什么都是点到为止,不说清楚.因为要做一个产品颜色切换的效果,有黑与白两种颜色,因此尝试使用Swiper的自定义 ...
- 物联网架构成长之路(47)-利用GitLab实现CI持续集成
0.前言 前段时间,考虑到要练习部署一套CI/CD的系统.一开始考虑到Jenkins,随着这两天的了解,发现最新版的GitLab已经提供有CI/CD集成了.所以本次博客,干脆一步到位,直接用GitLa ...
- GitLab CI/CD的官译【原】
CI / CD方法简介 软件开发的持续集成基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性.从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预. 它涉及在每次小迭代中不断 ...
- Swiper+ ejs模板引擎+ iScroll插件知识总结
一. Swiper swiper是一个应用于移动端的动画插件,原理类似于轮播图 官网 http://www.swiper.com.cn/# html结构 <div class="swi ...
- React实现一个简易版Swiper
背景 最近在公司内部进行一个引导配置系统的开发中,需要实现一个多图轮播的功能.到这时很多同学会说了,"那你直接用swiper不就好了吗?".但其实是,因为所有引导的展示都是作为np ...
- swiper的初步使用
1.引入文件,顺序引入(此处基于jquery,且版本至少1.7以上) <link rel="stylesheet" href="path/to/swiper-3.4 ...
- 轮播神器swiper插件
Swiper中文网:http://www.swiper.com.cn/ Swiper- 是免费的,最现代化的移动触摸滑块硬件加速的转换和惊人的天然行为.它的目的是在移动网站,移动网络应用和移动本地/混 ...
- Swiper教程 —— 使用方法
Swiper使用方法 1.首先加载插件,需要用到的文件有swiper.min.js和swiper.min.css文件. <!DOCTYPE html> <html> <h ...
随机推荐
- nand驱动移植
首先下载nand flash驱动 s3c_nand.c ,此文件包含着nand flash驱动具体的实现,将其复制到drivers/mtd/nand下: s3c_nand.c 下载地址 s3c_nan ...
- Office2003/2010等集成SP的简单方法
Office2003集成SP的简单方法 需要准备的工具:Office 2003 光盘镜像.SP3更新包.Office 2003 序列号.UltraISO,7-zip或winrar,虚拟光驱 步骤一:提 ...
- [转]Android Shape渲染的使用(经典,学习研究不后悔)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mzh3344258.blog.51cto.com/1823534/1215749 ...
- 学习笔记——单例模式Singleton
单例模式,很容易理解,就它一个. 比如网络请求服务类WebReq.它自己生成请求线程,并管理请求数据的返回,所以我们使用它进行网络请求时,不用每次都new一个,只需要使用一个实例就行了.WebReq实 ...
- 读《Ext.JS.4.First.Look》随笔
Ext JS 4是最大的改革已经取得了Ext框架.这些变化包括一个新类系统,引入一个新的平台,许多API变化和改进,和新组件,如新图表和新画组件.Ext JS 4是更快,更稳定,易于使用.(注意:Ex ...
- 转:Java eclipse下 Ant build.xml实例详解
在有eclipse集成环境下ant其实不是很重要,但有些项目需要用到,另外通过eclipse来学习和理解ant是个很好的途径,所以写他demo总结下要点,希望能够帮到大家. 一.本人测试环境eclip ...
- c++ data语意学
Data Member的绑定 extern float x; class Point3d { public: point3d(); //问题:被传回和被设定的x是哪一个x呢? float X() c ...
- Web应用的组件化(二)——管控平台 #7
Web应用的组件化(二) 管控平台 在上一篇中我们提到了组件化的大致思路,这一篇主要讲述在这么做之后,我们需要哪些外围手段去管控整个开发过程.从各种角度看,面对较大规模前端开发团队,都有必要建立这么一 ...
- jstat undocumented
jstat -J-Djstat.showUnsupported=true -name btrace.com.sun.btrace.samples.ThreadCounter.count 11674 h ...
- CodeForces 158C - Cd and pwd commands(模拟)
这个题我们又把题意理解错了,队友翻译了以后给我解释,我问这个直接一个单词开头的是要找到这个文件夹吗,他说是,然后我就呵呵了..奔着树形结构去和字符串维护就去了...做了好久都没模拟出来,感觉做出来的人 ...