zend framework 分页显示 Zend_Paginator的使用

zend framework 提供了一个分页类Zend_Paginator,Zend_Paginator强大的地方在自动分页和导航面板。 构造Zend_Paginator需要提供一个adapter,在手册上提供了五种选择 Adapter:Array,Zend_Db_Select,Zend_Db_Table_Select,Iterator,Null。

如果我们从数据库取得数据,在分页可以使用 Zend_DB_Select或则Zend_Db_Table_Select。

 1 class Draft extends Zend_Db_Table_Abstract
 2 {
 3     protected $_name = ‘draft‘;
 4     protected $_primary = ‘id‘;
 5 }
 6
 7 $draft = new Draft();
 8 $select = $draft->select(); //Zend_DB_Select对象
 9 $select->order("id desc"); //设置Zend_DB_Select对象的属性
10 $paginator = new Zend_Paginator(new Zend_Paginator_Adapter_DbTableSelect($select));
11 $paginator->setItemCountPerPage($this->page->per); //设置每页的条数
12 $paginator->setPageRange($this->page->range); //设置导航栏显示页码的个数
13 $paginator->setCurrentPageNumber(0); //设置当前页码
14 echo count($paginator)."<br>";//页面数
15 foreach ($paginator as $items) {
16 echo $items->id;//轮训取出内容
17 }

通常的使用方法是将paginator传递给view, $this->view->items = $paginator。在view页面中使用如下的代码:

 1 <?php
 2 if(count($this->items)>1)
 3 {
 4     echo $this->paginationControl($this->items,‘Sliding‘,‘partials/pagination-control.phtml‘);
 5 }
 6
 7 ?>
 8 <?php foreach ($this->itmes as $item) {
 9     echo "<div class=‘draftlist‘>";
10     $content = $item[‘content‘];//轮训取出每一条内容
11     echo "</div>";
12 }?>

$this->paginationControl($paginator,‘Sliding‘,‘pagination.phtml‘);会加载一个类 Zend_Paginator_ScrollingStyle_Sliding。导航栏的样式如图:

标签页的总数为5个,标签页会自动移动到合适的位置上,并且会判断首页、末页、上一页、下一页链接是否生效。判断当前页号在导航条的位置是调用了Zend_Paginator的_createPages()方法,其中用了一些数学方法计算,感兴趣的可以简单推算一下。

如果这样使用Paginator已经非常方便了,但是有一个问题:

select就必须查询全部数据。

因为我们只需要当前分页里面的数据,所以查询全部数据显然是浪费空间的。

重新写一个分页类当然可以,如果还想用Zend提供的类,作者想到一个方法,用较少空间,用Array构造Paginator。代码如下

 1 controller:
 2 class Draft extends Zend_Db_Table_Abstract
 3 {
 4     protected $_name = ‘draft‘;
 5     protected $_primary = ‘id‘;
 6 }
 7
 8 $draft = new Draft();
 9 $db = $draft->getAdapter();
10 $query = "select count(*) from draft";
11 $total = $db->fetchOne($query);
12
13 $begin = $pageNum*$perPage;
14 $select->limit($perPage,$begin);
15 $array = $db->fetchAll($select);
16
17 $paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Array(range(1,$total)));
18 $paginator->setItemCountPerPage($this->page->per); //设置每页的条数
19 $paginator->setPageRange($this->page->range); //设置导航栏显示页码的个数
20 $paginator->setCurrentPageNumber(0); //设置当前页码
21
22 $this->view->items = $paginator;
23 $this->view->array = $array
24 }
25 view:
26 <?php
27 if(count($this->items)>1)
28 {
29     echo $this->paginationControl($this->items,‘Sliding‘,‘partials/pagination-control.phtml‘);
30 }
31 ?>
32 <?php foreach ($this->array as $item) {
33     echo "<div class=‘draftlist‘>";
34     $content = $item[‘content‘];//轮训取出每一条内容
35     echo "</div>";
36 }?>

经过这样的修改,即可以使用导航条,每次取出的数据也仅仅是当前页面的数据,只是生成了一个数组对Paginator进行初始化。

zend framework 分页显示 Zend_Paginator的使用

时间: 2024-10-08 23:19:49

zend framework 分页显示 Zend_Paginator的使用的相关文章

Zend framework

Zend framework框架 开发web程序和服务,ZF采用MVC架构模式来分离应用程序下. PHP5面向对象描写:丰富完善的组件支持,Ajax支持 OOP MVC 环境需求和配置 php版本需要在5.2.0以上(Wamp) php需要开启PDO和PDO相关数据库引擎来运行ZF:extension=php_pdo.dll之前的分号去掉 Apache 开启rewrite_module模块,并开启.htaccess目录AllowOveride ALL ZF框架的搭配与调试:http://www.

菜菜鸟Zend Framework 2 不完全学习涂鸦(三)-- 例子功能设置

菜菜鸟Zend Framework 2 不完全学习涂鸦(三)-- 例子功能设置 这是涂鸦的第三篇,主要介绍一下ZF官网教程中所涉及的一些数据库方面的设置. 官网的教程时构建一个唱片的目录系统,包括唱片列表,增,删,改唱片信息. 注意:在开始教程之前,请确认: 1.是否已经打开了mod_rewrite功能 2.是否已经支持了 .htaccess 否则您除了访问首页之外将不能访问任何页面 一.系统功能设置 页面名称 页面功能说明 唱片列表(List of albums) 显示已有的所有唱片列表,同时

使用LiveDocx和Zend Framework生成基于模板的文档

使用PHP生成打印良好的格式良好的PDF文档并非易事.传统上,使用PHP生成PDF有两种主要方法.如果有足够的时间和耐心,两者都可以完成工作,但仍然有很多不足之处: HTML-to-PDF:这种方法广泛用于主流应用程序.这里使用众多开源库之一以编程方式创建HTML文档并将其转换为PDF.但是,由于HTML不是面向页面的格式(如PDF),因此无法在HTML和PDF之间执行1对1映射.典型的文字处理文件格式功能,例如页眉和页脚,孤儿和寡妇甚至页码都不能用HTML表示. 程序化:此方法可以完全控制生成

zend framework多模块多Layout配置

转自: http://blog.csdn.net/a82168506/article/details/10228011 上次接触zend framework已经很久远了,10年的事情了.最近在做一个项目,时间不紧,就又把ZF拿出来折腾.而我发现以前做ZF的记忆已经在我脑中如梦幻泡影,消失无踪,为了配置多模块还又去查了资料,为了避免此种情况再次发生,做个记录吧. 首先,我们要新建一个ZF项目,目录结构如下. 我们想要配置多模块呢,首先要在,application下面建一个modules文件夹,然后

PHP+Mysql————数据分页显示技术

通常情况下,一个页面加载大量的数据时,数据不可能同时显示出来.这时候,比较常用的方法就是滚动条和分页.看过电子书的孩子都知道,电子书那么多字,一个手机或pad的屏幕是无法全部显示的,开玩笑,一本几兆的书就好几百万字,一下子放到几寸的屏幕上,不得亮瞎你的眼.所以我们都是下滑使文字进行滚动或翻页.这篇博文就用来分享一下php的分页技术. 首先获取数据库中某表的数据,输出到网页上,然后再进行分页显示.一句话就讲明白了,但具体怎么分页的,请看代码. <?php header("content-ty

自制MVC框架CRUD操作、列表、分页显示插件介绍

这里涉及到的操作都是引用自Stephen.DALService数据层.数据访问层实现方式在后文中我会仔细的说明,先说明一下数据操作集成的插件. 1).InsertAttribute 用于插入记录. 状态返回值:假定hashtable传递变量名的是context ,那么返回值可通过context[InsertAttribute.ValueKey]得到,推荐返回的是插入的主键ID值,当然这个是由数据层设定的. 有以下属性可进行设置: 属性名 作用 默认值 选项说明 其它说明 Key 映射路径.格式如

zend framework获取数据库中枚举类enum的数据并将其转换成数组

在model中建立这样的模型,在其中写入获取枚举类的方法 class Student extends Zend_Db_Table{ protected $_name ='student'; protected $_primary ='id'; function getPartyEnum($enumname){ //适配器并获取数据 $db = $this->getAdapter(); $db->query("SET NAMES GBK"); $sql = $db->q

PHP+MySQL分页显示示例分析

Web开发是今后分布式程式开发的主流,通常的web开发都要涉及到与数据库打交道,客户端从服务器端读取通常都是以分页的形式来显示,一页一页的阅读起来既方便又美观.所以说写分页程序是web开发的一个重要组成部分,在这里,我们共同来研究分页程序的编写. 一.分页程序的原理 分页程序有两个非常重要的参数:每页显示几条记录($pagesize)和当前是第几页($page).有了这两个参数就可以很方便的写出分页程序,我们以MySql数据库作为数据源,在mysql里如果要想取出表内某段特定内容可以使用的 T-

zend framework框架学习走起——从零开始,点击记录-安装

zend framework第一步,先来安装下zend framework框架. 先介绍下,我这边的php配置环境,为图省事,我是安装wampserver来搭载php环境的,,php+Apache+mysql一下子全部搞定.所以我们的zendframwok框架安装所在文件夹就是在wampserver的www文件夹下. 我们要先去下载下来zend framework框架. 进入zend framework官网,你可以直接下载zend framework框架,也可以和我一样,选择composer方式