实例化一个分页类,$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,效果如下:
(2)Item pagination,效果如下:
(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中计算(几千万数据就傻了),所以应该使用
$paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Null(/**数量*/); $paginator->setItemCountPerPage($pageSize) ->setCurrentPageNumber($pageId) ->setPageRange($pageRange);
1.读数据库的count(*)
2.$paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Null(/**数量*/);
3.按limit读数据库表(即0,10->十条)
4.前台显示
分页是假的 数据也是假的 就能提高读取的速度 提高分页的效率!