Paginator这个东以前都自己动手实现,以前做出来管它叫Pager,后来发现这个词不太地道,pager是传呼机的意思,用传呼机分了n久的页...

上边就是我的一个实现了.
看过ZF的实现后,觉得原来的实现还是有一些可以改进的东西
下面是从zf网站扒过来的一些信息:
Zend_Paginator是一个用来对数据集分页并呈现的一个灵活的组件。
Zend_Paginator的主要设计目标是:
1.对任意数据进行翻页,而非专门针对关系数据库。
2.只取出需要用来进行呈现的数据。
3.不强制用户只适用一种途径呈现数据和渲染分页控件。
4.相对于ZF的其他组件解耦,让用户可单独使用。
为了实现分页,Zend_Paginator要求各种不同的数据源都实现为具备一些公共方法的适配器。
ZF提供了以下几种数据源的适配器:
1 Array
2 DbSelect
3 DbTableSelect
4 Iterator
5 Null(没有数据源的情况下,一样可以使用ZP来控制分页)
我们通过吧适配器传给构造函数来创建Zend_Paginator的实例。
$paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Array($array));
当然,也可以使用工厂方法来创建实例。
$paginator = Zend_Paginator::factory($array);
创建实例后,我们需要告知$paginator当前页码:
$paginator->setCurrentPageNumber($page);
最简单的保持页码的方式是通过url传入,Zend推荐的方法是使用Zend_Controller_Router_Interface-compatible router来处理。
以下是在ini中配置的例子:
routes.example.route = articles/:articleName/:page
routes.example.defaults.controller = articles
routes.example.defaults.action = view
routes.example.defaults.page = 1
routes.example.reqs.articleName = \w+
routes.example.reqs.page = \d+
有了以上路由配置,我们可以这样来传页码
$paginator->setCurrentPageNumber($this->_getParam('page'));
为了在页面上呈现,我们把paginator传给view
$this->view->paginator = $paginator;
在视图脚本中,我们可以这样来呈现分页列表和控制器:
<html>
<body>
<h1>Example</h1>
<?php if (count($this->paginator)): ?>
<ul>
<?php foreach ($this->paginator as $item): ?>
<li><?= $item; ?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
<?= $this->paginationControl($this->paginator,
'Sliding',
'my_pagination_control.phtml'); ?>
</body>
</html>