博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CI分页器pagination的原理及实现
阅读量:6154 次
发布时间:2019-06-21

本文共 3399 字,大约阅读时间需要 11 分钟。

以下是本人原创,如若转载和使用请注明转载地址。本博客信息切勿用于商业,可以个人使用,若喜欢我的博客,请关注我,谢谢!
下面这段代码是从官网上翻译过来的,介绍了分页的用例
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该怎么写呢?请教请教啊???

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

你可能感兴趣的文章
微信小程序开发-框架
查看>>
redo、undo、binlog的区别
查看>>
RecycleView设置顶部分割线(记录一个坑)
查看>>
汉字转拼音 (转)
查看>>
会计基础_001
查看>>
小程序: 查看正在写的页面
查看>>
Jenkins持续集成环境部署
查看>>
MWeb 1.4 新功能介绍二:静态博客功能增强
查看>>
预处理、const与sizeof相关面试题
查看>>
爬虫豆瓣top250项目-开发文档
查看>>
有趣的数学书籍
查看>>
teamviewer 卸载干净
查看>>
eclipse的maven、Scala环境搭建
查看>>
架构师之路(一)- 什么是软件架构
查看>>
USACO 土地购买
查看>>
【原创】远景能源面试--一面
查看>>
B1010.一元多项式求导(25)
查看>>
10、程序员和编译器之间的关系
查看>>
配置 RAILS FOR JRUBY1.7.4
查看>>
AndroidStudio中导入SlidingMenu报错解决方案
查看>>