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 ...
随机推荐
- Shell命令替换与变量替换
命令替换 命令替换是指Shell可以先执行命令,将输出结果暂时保存,在适当的地方输出.命令替换的语法: `command` 注意是反引号,不是单引号,这个键位于 Esc 键下方.下面的例子中,将命令执 ...
- 用PHP实现验证码功能
目前,不少网站为了防止用户利用机器人自动注册.登录.灌水,都采用了 验证码技术.所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片, 图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验 ...
- cocos2d-js 显示帧序列图中的一帧
1.flashCC中打开库,在一个元件中右键->Generate Sprite Sheet...设置如下: 2.点Export后得到playerWalk.png和playerWalk.plist ...
- width为auto或者100%的区别
一.四个理论 1. 某div不显示设置宽度,那么width为auto. 2. 某div的width在默认情况设置的是盒子模型中content的值 3. 某div的width为100%表示的是此div盒 ...
- protobuf与json互相转换
Java http://code.google.com/p/protobuf-java-format/ maven <dependency> <groupId>com.goog ...
- git第三篇---建立一个project
Git global setup: git config --global user.name "xx" git config --global user.email " ...
- Html基础详解之(jquery)
jquery选择器: #id 根据给定的ID匹配一个元素,如果选择器中包含特殊字符,可以用两个斜杠转义.(注:查找 ID 为"myDiv"的元素.) <!DOCTYPE ht ...
- 关于oracle 还原数据库的要领
create tablespace DSXZFW datafile 'D:\yangk\oraclespace\DSXZFW.ora' size 1000m; // 创建表空间,注意如果要还原数据库的 ...
- git 使用系列(一)—— git stash 的使用
1. git 放弃本地修改 git checkout . #本地所有修改的.没有的提交的,都返回到原来的状态 git stash #把所有没有提交的修改暂存到stash里面.可用git stash p ...
- android 手势识别学习
引自http://www.cnblogs.com/android100/p/android-hand.html http://blog.csdn.net/jiangshide/article/d ...