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 ...
随机推荐
- Math类的round方法小解
在Math类中有三个关于“四舍五入”的静态方法(ceil,floor,round): ① Math.ceil(number) 向上取整,Math.ceil(11.2) 结果:12 ...
- php 高并发下数据同步的问题
1.加锁缺点:降低性能优点:减少代码逻辑复杂度(题主现在这样超过1w条就删数据的逻辑,感觉看起来就点糟糕啊,如果整个系统一复杂,这样的来回写数据,你确定你的逻辑还维护得下去?建议题主梳理一下代码的逻辑 ...
- 使用PreListener与InteractionListener的一个小发现
如果两个刚体使用PreListener忽略了它的碰撞时,如果这时你使用InteractionListener来侦听它们的碰撞还是可以侦听到的: package { import com.bit101. ...
- posix信号量(sem_t)
引言 信号量分为三种:posix有名信号量(使用Posix IPC名字标识,至少具有随内核的持续性)/posix基于内存的信号量(共享内存,随进程的持续性)/System V 信号量(内核) 有了互斥 ...
- context-param与init-param的区别与作用
<context-param>的作用: web.xml的配置中<context-param>配置作用 1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件 ...
- Chrome 43+浏览器 Cookies encrypted_value解密脚本
python 3.3.5 # -*- coding: utf-8 -*- # Used information from: # http://stackoverflow.com/questions/4 ...
- 使用maven开发过程中,pom报的一些错的解决方法
1. maven-resources-plugin prior to 2.4 is not supported by m2e. Use maven- resources-plugin versio ...
- 使用Log4net记录日志
首先说说为什么要进行日志记录.在一个完整的程序系统里面,日志系统是一个非常重要的功能组成部分.它可以记录下系统所产生的所有行为,并按照某种规范表达出来.我们可以使用日志系统所记录的信息为系统进行排错, ...
- Nginx配置-伪静态,隐藏index.php大入口
server { listen ; server_name ; root E:/www/wvtuan/; index index.php index.html; log_not_found off; ...
- git 使用系列(一)—— git stash 的使用
1. git 放弃本地修改 git checkout . #本地所有修改的.没有的提交的,都返回到原来的状态 git stash #把所有没有提交的修改暂存到stash里面.可用git stash p ...