Zend Paginator

本文介绍了 ZendPaginator 组件的功能及使用方法,该组件适用于任意数据集的分页处理,不仅限于关系型数据库。文章详细讲解了如何利用 ZendPaginator 进行数据分页,并展示了配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Zend Paginator(翻页器)


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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值