cakephp分页
我们做的RS项目中用到的是第一种Integrating Pear Pager.
大家可以到 http://bakery.cakephp.org/articles/view/45去下载分页插件.
下载得到的文件是:Pager-2.4.3.tar
将其解压缩可以得到:common.php,jumping.php,pager.php等文件,RS项目中只用到过这三个文件.
大家可以到 http://bakery.cakephp.org/articles/view/45去下载分页插件.
下载得到的文件是:Pager-2.4.3.tar
将其解压缩可以得到:common.php,jumping.php,pager.php等文件,RS项目中只用到过这三个文件.
Integrating Pear Pager分页的原理:
对大数据源进行处理,返回小数据源.每次点击分页的连接都会进行一次处理.
对大数据源进行处理,返回小数据源.每次点击分页的连接都会进行一次处理.
RS项目具体实现(以20系列的10画面为例):
1. 首先在/RS/source/dev/cake/vendors下新建一个pear目录, 把common.php,jumping.php,pager.php.这三个文件拷贝到该目录下.
2.修改所有
require_once
的路经
,
使其能找到包含的文件
.
如
:
// include_once $classfile;
require_once
(VENDORS .
$classfile
);
VENDORS
常量已经在/RS/source/dev/cake/cake/config/paths.php中定义好了,即指定到/RS/source/dev/cake/vendors.
3.在控制器/RS/source/dev/cake/app/controllers/search_controller.php中加载分页代码.
$params = array(
'itemData' => $dataSource2010, //放入数据源
'perPage' => 10, //每页显示的记录数
'mode' => 'Jumping', //分页模式选择
'delta' => 5 //显示翻页号码数
);
$params = array(
'itemData' => $dataSource2010, //放入数据源
'perPage' => 10, //每页显示的记录数
'mode' => 'Jumping', //分页模式选择
'delta' => 5 //显示翻页号码数
);
$pager = & pager::factory($params);
$data = $pager->getPageData(); //取得处理后的数据源
$links = $pager->getLinks(); //翻页条目栏的显示
$itemView = $links['all']; //翻页条栏目的显示
$data = $pager->getPageData(); //取得处理后的数据源
$links = $pager->getLinks(); //翻页条目栏的显示
$itemView = $links['all']; //翻页条栏目的显示
//总页数
$numPages = $pager->numPages();
//本页ID
$currentPageID = $pager->getCurrentPageID();
//总条数
$numItems = $pager->numItems();//$pager中的更多的方法可以参考common.php
$numPages = $pager->numPages();
//本页ID
$currentPageID = $pager->getCurrentPageID();
//总条数
$numItems = $pager->numItems();//$pager中的更多的方法可以参考common.php
$this->set('itemView' , $itemView);
$this->set('SearchView' , $data);
$this
->set(
'itemView'
,
$itemView
);
$this
->set(
'SearchView'
,
$data
);
$this
->set(
'numItems'
,
$numItems
);
$this
->set(
'currentPageID'
,
$currentPageID
);
$this
->set(
'numPages'
,
$numPages
);
4.重新运行,就可以显示出分页数据.
当前页显示于最中间的修改:
在common.php中
getPageRangeByPageId
方法
.
function
getPageRangeByPageId(
$pageid
=
null
)
{
$pageid
=
isset
(
$pageid
) ? (
int
)
$pageid
:
$this
->_currentPage;
if
(
isset
(
$this
->_pageData[
$pageid
]) ||
is_null
(
$this
->_itemData)) {
$start
= 0;
if
(
$pageid
> (
int
)(
$this
->_delta/2) &&
$this
->_totalPages >
$this
->_delta) {
$start
= (
$pageid
- (
int
)(
$this
->_delta/2));
//
当前分页
ID
减去显示页数的一半
做为翻页开始数
}
else
{
$start
= (((
$pageid
+ ((
$this
->_delta - (
$pageid
%
$this
->_delta))) %
$this
->_delta) /
$this
->_delta) - 1) *
$this
->_delta +1;
}
return
array
(
max
(
$start
, 1),
min
(
$start
+
$this
->_delta-1,
$this
->_totalPages)
);
}
else
{
return
array
(0, 0);
}
}
该方法返回一个带两个元素的数组
.
第一个元素是从第几页开始
.
第二个元素是到第几页结束
.
每页显示的记录数和翻页号码数 能在config.php中进行修改的处理:
1.在/RS/source/dev/cake/vendors/pear下面的common.php中增加
startPager
方法
.
function
startPager()
{
if
(!
class_exists
(
"Config"
)) {
require_once
(APP .
'controllers'
. DS .
'components'
. DS .
'config.php'
);
}
$perPage
= Config :: PER_PAGE;
$delta
= Config :: DEL_TA;
//
毎ページ表示する件数をセットします。
$this
->_perPage =
$perPage
;
//
アイテムにページ数をセットします。
$this
->_delta =
$delta
;
}
2. 在/RS/source/dev/cake/vendors/pear下面的jumping.php的
pager_jumping
方法中调用
startPager
方法
function
pager_jumping(
$options
=
array
())
{
$this
->startPager();
//
调用
startPager
方法
$err
=
$this
->setOptions(
$options
);
if
(
$err
!== PAGER_OK) {
return
$this
->raiseError(
$this
->errorMessage(
$err
),
$err
);
}
$this
->build();
}
3.
在
/RS/source/dev/cake/app/controllers/components/config.php
中添加
/**
* 毎ページ表示する件数をセットします。
*/
const PER_PAGE = 10;
/**
* アイテムにページ数をセットします。
*/
const DEL_TA = 5;