下一秒,我不知道。

最新文章

好记性不如烂笔头。记录点滴,方便你我。

CAKEPHP分页功能实现心得

栏目:[PHP技术 ] 浏览量:182

分页函数在信息内网站或者系统中使用普遍,在此我向大家详细介绍一下cakephp分页函数的详细信息

cakephp 分页常用方法

  $this->paginate = array(
    'conditions'=>array(  
    'Article.category_id'=>$category_id,        
        ),  
    'order' =>array(
        'Article.modified' => 'DESC'
        ),  
    'limit' => 10  
    );
  $data = $this->paginate();


其中 $data = $this->paginate(参数:模块名);默认为当前调用的首要模块;其中含有很多参数,如:limit,page等等。

当数据在前台页面时,可以对分页进行调用或者获取其中参数

$page =  intval($this->Paginator->request->params['paging']['Article']['page']);
$limit =  intval($this->Paginator->request->params['paging']['Article']['limit']);
在此我打印出变量“$this->Paginator->request->params['paging']['Article']”。
array(10) { ["page"]=> int(1) ["current"]=> int(8) ["count"]=> int(8) ["prevPage"]
=> bool(false) ["nextPage"]=> bool(false) ["pageCount"]=> int(1) ["order"]=> array
(1) { ["Article.modified"]=> string(4) "DESC" } ["limit"]=> int(10) ["options"]=> 
array(0) { } ["paramType"]=> string(5) "named" }



一目了然了吧,然后分页函数就可以根据这些做文章了。

下面我来介绍一个简单分页的例子吧(虽然简单,但是五张俱全!)。

个人建议分页函数写在单独的文件里面,方便调用。

调用方式 $this->Element('Cpage'); 文件对应位置:view->element->Cpage.ctp

分页具体内容:

echo $this->Paginator->first(__('首页'), array('tag' => 'div'));
    if($this->Paginator->hasPrev()){
        echo $this->Paginator->prev(__('上一页'), array('tag' => 'div'));
    }    
    echo $this->Paginator->numbers(array('modulus' => 5,'tag' => 'div'));    
    if($this->Paginator->hasNext()){
        echo $this->Paginator->next(__('下一页'), array('tag' => 'div'));
    }    
    echo $this->Paginator->last(__('尾页'), array('tag' => 'div'));
    echo $this->Paginator->counter(
        __('共<b>{:pages}</b>页 总共<b>{:count}</b>条数据'), array('tag' => 'div')
        );       
对比输出html源码:
<div class="MainStyle"><div class="active"><a>1</a></div><div><a href="/admin/ArticleAdmin/index/page:2">2</a></div><div class="next"><a href="/admin/ArticleAdmin/index/page:2" rel="next">下一页</a></div><div><a href="/admin/ArticleAdmin/index/page:2" rel="last">尾页</a></div>共<b>2</b>页 总共<b>18</b>条数据 </div>


就这么简单。分页轻松搞定。

显而易见的,分页函数调用了分页类,我们首先找到分页函数的位置

\lib\Cake\View\Helper\PaginatorHelper.php,

class PaginatorHelper extends AppHelper  分页助手继承了appHelper。

下面我来一一说明下几个分页函数的使用方法:

first() 首页函数

public function first($first = '<< first', $options = array()) 

frist函数含有两个参数 first 与 option,第一个参数是视图显示的文字。第二个参数是当前

首页元素所附属的选项(也可称为属性吧)具体如下,tag是块元素,默认为span 我在此使用

的为div,separator 是指分页中块与块之间的分隔符,默认为' | '个人觉得不太好,使用空

格是个不错的选择。ellipsis 是指当分页数据过多时,使用省略符号的定义。默认'...',个人

觉得还行。class代表块元素附带的样式名称。可以自定义,默认为空。

$options = (array)$options + array(
'tag' => 'span',
'after' => null,
'model' => $this->defaultModel(),
'separator' => ' | ',
'ellipsis' => ' ... ',
'class' => null
);


是否存在上一页、下一页函数为 hasPrev hasNext,函数返回值为 bool型,false 或者 true。 

prev next last函数与first相近,这里不再详细说明了。

下面到了number函数,主要实现分页中间页码的效果。

public function numbers($options = array()) 

numbers只有一个参数,具体选择为'before','after','first','last'。 

$options = array('before' => ' | ', 'after' => ' | ', 'first' => 'first', 'last' => 'last'}

另外,numbers函数还含有默认的defaults变量,其中mudulus表示总共显示多少个页面,

currentClass 与currentTag表示当前活动页的样式和块标签。$options += $defaults;实现默认defaults变量加入到options中。

$defaults = array(
'tag' => 'span', 'before' => null, 'after' => null, 'model'=> $this->defaultModel(), 'class' => null,
'modulus' => '8', 'separator' => '', 'first' => null, 'last' => null, 'ellipsis' => '...',
'currentClass' => 'active', 'currentTag' => 'a');


只剩下最后一个counter函数了,该函数用户统计概况当前分页情况,我们可以拼凑出自己想要的分页效果。里面包含多个占位符

'{:page}', '{:pages}', '{:current}', '{:count}', '{:start}', '{:end}', '{:model}'其中可以包含这些变量组合使用非常的实用。


博客评论: