网上不多有zend framework非fectall()分页的中文参考,在此提供一个供新手参考php
//controler控制器方法 html
- //controler控制器方法
- public function findAction()
- {
- $this->view->results = "分页测试 ";
- $basUser=new BasUser();
- //本身定义的model
- $count=$basUser->getAdapter()->fetchOne("SELECT count(*) FROM Bas_User");
- // 获取basuser表的记录总数,有些网上的案例使用fetchAll()方法,数据量大的时候不可行,目前用cout(*)优于fetchAll()
- //以后可考虑使用缓存
- $page = $this->_request->getParam('page', 1);
- //设定page,默认第一页
- $rows=$basUser->fetchAll('true','userId',5,($page-1)*5); // 只查询所须要的数据
- //从basuser表中查询按userId排序
- $paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Null($count));
- $paginator->setItemCountPerPage(5); // 每页20条
- $paginator->setCurrentPageNumber($page);
- $this->view->basUsers=$rows;
- $this->view->paginator = $paginator ; //将paginator传到view层
- $this->render("index/find",null,true);
- }
find.phtml view层缓存
- <html>
- <body>
- <style>
- /*分页样式*/
- .pages{font-size:12px; color:#000; text-align:center; zoom:1; padding:10px 0; }
- .pages a{display:inline-block;padding:3px 5px 2px 5px;text-indent:0;width:16px;}
- .pages span{font-size:12px; margin:0px 2px;padding:3px 5px 1px 5px;text-align:center;border:1px solid #D1E7FF;color:#075aaa;font-weight:bold;cursor:pointer;}
- .pages .pagesOn{color:#000; border-color:#fff}
- .pages .disabled{color:#999; border-color:#999; cursor:default;}
- </style>
- <h1>Example</h1>
- <table>
- <tr>
- <th>用户名</th>
- <th>密 码</th>
- </tr>
- <?php
- foreach ($this->basUsers as $key => $value) {
- ?>
- <tr>
- <td>
- <?php
- echo $value['userId'];
- echo $value['userName'];?>
- </td>
- <td>
- <?php
- echo $value['userPassword']?>
- </td>
- </tr>
- <?php
- }
- ?>
- </table>
- <?php echo $this->paginationControl($this->paginator,
- 'Sliding',
- 'index/pager.phtml'); ?>
- </body>
- </html>
pager.phtml分页层ide
- <!--
- See http://developer.yahoo.com/ypatterns/pattern.php?pattern=searchpagination
- -->
- <?php if ($this->pageCount): ?>
- <div class="pages">
- <!-- Previous page link -->
- <?php if (isset($this->previous)): ?>
- <span><a href="<?php echo $this->url(array('page' => 1)); ?>">
- <<
- </a></span>
- <span><a href="<?php echo $this->url(array('page' => $this->previous)); ?>">
- <
- </a></span>
- <?php else: ?>
- <span class="disabled"><<</span>
- <span class="disabled"><</span>
- <?php endif; ?>
- <!-- Numbered page links -->
- <?php foreach ($this->pagesInRange as $page): ?>
- <?php if ($page != $this->current): ?>
- <span><a href="<?php echo $this->url(array('page' => $page)); ?>">
- <?php echo $page; ?>
- </a></span>
- <?php else: ?>
- <span class="pagesOn">
- <?php echo $page; ?>
- </span>
- <?php endif; ?>
- <?php endforeach; ?>
- <!-- Next page link -->
- <?php if (isset($this->next)): ?>
- <span><a href="<?php echo $this->url(array('page' => $this->next)); ?>">
- >
- </a></span>
- <span><a href="<?php echo $this->url(array('page' => $this->pageCount)); ?>">
- >>
- </a></span>
- <?php else: ?>
- <span class="disabled">></span>
- <span class="disabled">>></span>
- <?php endif; ?>
- </div>
- <?php endif; ?>
注:网上流传许多使用fetchAll()方法来查询全部的记录,而后使用$paginator = Zend_Paginator::factory($userArray);方法来定义$paginator,不可在数据量大的环境中使用,也就只能学习时使用!本文使用了学习
$paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Null($count)); 测试
方式来定义$paginator效率高于factory方式!fetch
若是提示找不到Zend_Paginator_Adapter_Null可手工加载一下:Zend_Loader::loadClass('Zend_Paginator_Adapter_Null'); this