CAKEPHP分页功能实现心得
分页函数在信息内网站或者系统中使用普遍,在此我向大家详细介绍一下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}'其中可以包含这些变量组合使用非常的实用。