cakephp分页/cakephpページング/cakephp paging

 
cakephp分页
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                  //显示翻页号码数
);
$pager = & pager::factory($params);
$data  = $pager->getPageData();      //取得处理后的数据源
$links = $pager->getLinks();        //翻页条目栏的显示
$itemView = $links['all'];         //翻页条栏目的显示
//总页数
$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;
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值