Zend_Paginator分页

 

实例化一个分页类,$array是从数据表内读数据的类方法: 

?
1
$paginator  new  Zend_Paginator(  new  Zend_Paginator_Adapter_Array(  $array  ));

设置当前页码: 

?
1
$paginator  ->setCurrentPageNumber(  $page  );


从URL获取当前页码: (ZF Dream 

?
1
$paginator  ->setCurrentPageNumber(  $this  ->_getParam(  'page'  ));

把分页内容发到视图: 

?
1
$this  ->view->paginator =  $paginator  ;

当然视图那里必须有$this->paginator接收,象这样: 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<html>
<body>
<h1>Example</h1>
<?php  if  (  count  (  $this  ->paginator)): ?>
<ul>
<?php  foreach  (  $this  ->paginator  as  $item  ): ?>
    <li><?php  echo  $item  ; ?></li>
<?php  endforeach  ; ?>
</ul>
<?php  endif  ; ?>
 
<?php  echo  $this  ->paginationControl(  $this  ->paginator,
                                      'Sliding'  ,  //页码样式
                                      'my_pagination_control.phtml'  );  //页码模板?>
</body>
</html>

下面是几种页码样式: (ZF Dream 

All:显示所有页;

Elastic:Google式,页码范围会根据用户当前页而扩展或缩小;

Jumping:页码最后页之后会显示第一页;

Sliding:Yahoo式,当前页会放在页码中间,这是默认样式。 

当然,paginationControl也可以不在视图中设置,而是写在控制器中: 

?
1
2
3
4
5
6
7
8
9
10
Zend_Paginator::setDefaultScrollingStyle(  'Sliding'  );
 
Zend_View_Helper_PaginationControl::setDefaultViewPartial(
 
      'my_pagination_control.phtml'
 
);
 
 
$paginator  ->setView(  $view  );

官方手册 提供了几种页码模板的视图写法,偷懒的人可以直接复制过来用:

(1)Search pagination,效果如下:

Zend_Paginator分页

(2)Item pagination,效果如下:

Zend_Paginator分页

(3)Dropdown pagination,效果就是个下拉框选页码

下面是页码模板视图中可以使用的一些占位符,你要写自己的页码模板时会有用,写法是$this->first:

类型 解释
first integer 第一页的页码
firstItemNumber integer 当前页上第一条记录是整个记录集的第几条
firstPageInRange integer 第一个显示出的页码(各页码样式不同)
current integer 当前页码
currentItemCount integer 本页上的记录有几条
itemCountPerPage integer 每页上最多可以显示几条记录
last integer 最后一页的页码
lastItemNumber integer 当前页上最后一条记录是整个记录集的第几条
lastPageInRange integer 最后一个显示出的页码(各页码样式不同)
next integer 下一页的页码
pageCount integer 一共多少页
pagesInRange array 显示在网页上的页码数组(各页码样式不同)
previous integer 上一页的页码
totalItemCount integer 一共有几条记录

下面是Paginator类的一些方法: (ZF Dream 

1、设置当前页码(默认是1) 

?
1
$paginator  ->setCurrentPageNumber(  $page  );

2、设置每页显示的最大数量(默认是10) 

?
1
$paginator  ->setItemCountPerPage(  $num  );

3、设置页码里显示多少页(默认为10页) 

?
1
$paginator  ->setPageRange(  $page  );

注意:大多数时候这个数字会有用,但是不同的页码样式会有不同的效果,比如Elastic会把这个数字作为起始值

4、设置视图,方便调用 

?
1
$paginator  ->setView(  $view  );

这里$view就是当前视图的对象。

×××××××××××××××××××××××××××××××××

zend分页是按照同用sql来设计的(limit不考虑),所以为了提高分页的效率,不应该将这个数组放入zend_paginator的count中计算(几千万数据就傻了),所以应该使用

 

  1. $paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Null(/**数量*/);  
  2.         $paginator->setItemCountPerPage($pageSize)  
  3.                                   ->setCurrentPageNumber($pageId)  
  4.                                   ->setPageRange($pageRange);  

 

1.读数据库的count(*)

2.$paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Null(/**数量*/);
3.按limit读数据库表(即0,10->十条)

4.前台显示

分页是假的 数据也是假的 就能提高读取的速度 提高分页的效率!

摘自:http://zf.is-programmer.com/posts/10846.html

你可能感兴趣的:(Zend)