zend framework 分页显示 Zend_Paginator的使用
2014-08-19 16:42
295 查看
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。
通常的使用方法是将paginator传递给view, $this->view->items = $paginator。在view页面中使用如下的代码:
$this->paginationControl($paginator,'Sliding','pagination.phtml');会加载一个类 Zend_Paginator_ScrollingStyle_Sliding。导航栏的样式如图:
![](http://images.cnitblog.com/i/658706/201408/191719075968577.jpg)
![](http://images.cnitblog.com/i/658706/201408/191719239712147.jpg)
标签页的总数为5个,标签页会自动移动到合适的位置上,并且会判断首页、末页、上一页、下一页链接是否生效。判断当前页号在导航条的位置是调用了Zend_Paginator的_createPages()方法,其中用了一些数学方法计算,感兴趣的可以简单推算一下。
如果这样使用Paginator已经非常方便了,但是有一个问题:
select就必须查询全部数据。
因为我们只需要当前分页里面的数据,所以查询全部数据显然是浪费空间的。
重新写一个分页类当然可以,如果还想用Zend提供的类,作者想到一个方法,用较少空间,用Array构造Paginator。代码如下
经过这样的修改,即可以使用导航条,每次取出的数据也仅仅是当前页面的数据,只是生成了一个数组对Paginator进行初始化。
如果我们从数据库取得数据,在分页可以使用 Zend_DB_Select或则Zend_Db_Table_Select。
class Draft extends Zend_Db_Table_Abstract { protected $_name = 'draft'; protected $_primary = 'id'; } $draft = new Draft(); $select = $draft->select(); //Zend_DB_Select对象 $select->order("id desc"); //设置Zend_DB_Select对象的属性 $paginator = new Zend_Paginator(new Zend_Paginator_Adapter_DbTableSelect($select)); $paginator->setItemCountPerPage($this->page->per); //设置每页的条数 $paginator->setPageRange($this->page->range); //设置导航栏显示页码的个数 $paginator->setCurrentPageNumber(0); //设置当前页码 echo count($paginator)."<br>";//页面数 foreach ($paginator as $items) { echo $items->id;//轮训取出内容 }
通常的使用方法是将paginator传递给view, $this->view->items = $paginator。在view页面中使用如下的代码:
<?php if(count($this->items)>1) { echo $this->paginationControl($this->items,'Sliding','partials/pagination-control.phtml'); } ?> <?php foreach ($this->itmes as $item) { echo "<div class='draftlist'>"; $content = $item['content'];//轮训取出每一条内容 echo "</div>"; }?>
$this->paginationControl($paginator,'Sliding','pagination.phtml');会加载一个类 Zend_Paginator_ScrollingStyle_Sliding。导航栏的样式如图:
![](http://images.cnitblog.com/i/658706/201408/191719075968577.jpg)
![](http://images.cnitblog.com/i/658706/201408/191719239712147.jpg)
标签页的总数为5个,标签页会自动移动到合适的位置上,并且会判断首页、末页、上一页、下一页链接是否生效。判断当前页号在导航条的位置是调用了Zend_Paginator的_createPages()方法,其中用了一些数学方法计算,感兴趣的可以简单推算一下。
如果这样使用Paginator已经非常方便了,但是有一个问题:
select就必须查询全部数据。
因为我们只需要当前分页里面的数据,所以查询全部数据显然是浪费空间的。
重新写一个分页类当然可以,如果还想用Zend提供的类,作者想到一个方法,用较少空间,用Array构造Paginator。代码如下
controller: class Draft extends Zend_Db_Table_Abstract { protected $_name = 'draft'; protected $_primary = 'id'; } $draft = new Draft(); $db = $draft->getAdapter(); $query = "select count(*) from draft"; $total = $db->fetchOne($query); $begin = $pageNum*$perPage; $select->limit($perPage,$begin); $array = $db->fetchAll($select); $paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Array(range(1,$total))); $paginator->setItemCountPerPage($this->page->per); //设置每页的条数 $paginator->setPageRange($this->page->range); //设置导航栏显示页码的个数 $paginator->setCurrentPageNumber(0); //设置当前页码 $this->view->items = $paginator; $this->view->array = $array } view: <?php if(count($this->items)>1) { echo $this->paginationControl($this->items,'Sliding','partials/pagination-control.phtml'); } ?> <?php foreach ($this->array as $item) { echo "<div class='draftlist'>"; $content = $item['content'];//轮训取出每一条内容 echo "</div>"; }?>
经过这样的修改,即可以使用导航条,每次取出的数据也仅仅是当前页面的数据,只是生成了一个数组对Paginator进行初始化。
相关文章推荐
- Zend Framework使用Zend_Paginator进行数据库交互和分页
- Zend Framework使用Zend_Paginator进行数据库交互和分页
- Zend Framework使用Zend_Paginator进行数据库交互和分页
- zend framework 分页(Zend_Paginator_Adapter_Null定义 $paginator )
- Zend Framework: Zend_Paginator 分页
- zend framework 分页 Zend_Paginator 分页搜索条件
- 使用DataPager 显示记录数,分页
- NHibernate使用Criteria分页显示并返回记录总数
- 使用 xsl 对 xml 文档进行动态排序,分页显示的扩展
- 使用PagedDataSource类实现DataList和Repeater控件的分页显示
- REPEATER控件显示数据,交替项显示;分页类的使用,Repeater控件分页;使用DataList控件绑定数据;使用DataList控件的选择模板
- 使用该JavaBean可以将数据在JSP页面中以表格的形式显示出来,并具有动态排序、动态生成查询、自动分页功能
- 使用PagedDataSource类实现DataList和Repeater控件的分页显示功能
- 使用DataList分页显示数据,双向排序,添加checkbox控件。
- 使用PagedDataSource类实现DataList和Repeater控件的分页显示
- 使用XML、XSLT和XPath创建可排序、分页、重用的数据显示页面
- SQL Server2000 索引结构及其使用 (实现小数据量和海量数据的通用分页显示存储过程)
- 使用PagedDataSource类实现DataList和Repeater控件的分页显示
- 使用XML、XSLT和XPath创建可排序、分页、重用的数据显示页面[转载]
- 使用PagedDataSource类实现DataList和Repeater控件的分页显示[转]