网上很少有zend framework非fectall()分页的中文参考,在此提供一个供新手参考

//controler控制器方法 

 
  
  1. //controler控制器方法
  2.   public function findAction() 
  3.     { 
  4.          
  5. $this->view->results = "分页测试 "
  6.        
  7.          $basUser=new BasUser(); 
  8.         //自己定义的model
  9.           $count=$basUser->getAdapter()->fetchOne("SELECT count(*) FROM Bas_User"); 
  10.          // 获取basuser表的记录总数,有些网上的案例使用fetchAll()方法,数据量大的时候不可行,目前用cout(*)优于fetchAll()
  11. //之后可考虑使用缓存
  12.            $page = $this->_request->getParam('page', 1); 
  13.           //设定page,默认第一页
  14.           $rows=$basUser->fetchAll('true','userId',5,($page-1)*5); // 只查询所需要的数据 
  15.            //从basuser表中查询按userId排序
  16.           $paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Null($count)); 
  17.         
  18.            $paginator->setItemCountPerPage(5); // 每页20条 
  19.            $paginator->setCurrentPageNumber($page); 
  20.         
  21.    
  22.          $this->view->basUsers=$rows; 
  23.         $this->view->paginator = $paginator ; //将paginator传到view层
  24.                           
  25.         $this->render("index/find",null,true); 
  26.     } 

 

find.phtml view层

 
  
  1. <html> 
  2. <body> 
  3. <style> 
  4. /*分页样式*/ 
  5. .pages{font-size:12px; color:#000; text-align:center; zoom:1; padding:10px 0; } 
  6. .pages a{display:inline-block;padding:3px 5px 2px 5px;text-indent:0;width:16px;} 
  7. .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;} 
  8. .pages .pagesOn{color:#000; border-color:#fff} 
  9. .pages .disabled{color:#999; border-color:#999; cursor:default;} 
  10. </style> 
  11. <h1>Example</h1> 
  12. <table> 
  13.     <tr> 
  14.         <th>用户名</th> 
  15.         <th>密&nbsp;码</th> 
  16.     </tr> 
  17. <?php 
  18. foreach ($this->basUsers as $key => $value) { 
  19.     ?> 
  20. <tr> 
  21.         <td> 
  22.      <?php 
  23.      echo $value['userId']; 
  24.     echo $value['userName'];?> 
  25.     </td> 
  26.         <td> 
  27.         <?php 
  28.     echo $value['userPassword']?> 
  29.     </td> 
  30.     </tr> 
  31. <?php 
  32. ?>   
  33. </table> 
  34.   
  35. <?php echo $this->paginationControl($this->paginator, 
  36.                                     'Sliding', 
  37.                                     'index/pager.phtml'); ?> 
  38. </body> 
  39. </html> 

 

pager.phtml分页层

 
  
  1. <!-- 
  2. See http://developer.yahoo.com/ypatterns/pattern.php?pattern=searchpagination 
  3. --> 
  4.   
  5. <?php if ($this->pageCount): ?> 
  6. <div class="pages"> 
  7. <!-- Previous page link --> 
  8. <?php if (isset($this->previous)): ?> 
  9. <span><a href="<?php echo $this->url(array('page' => 1)); ?>"> 
  10.     &lt;&lt; 
  11.   </a></span> 
  12.   <span><a href="<?php echo $this->url(array('page' => $this->previous)); ?>"> 
  13.     &lt; 
  14.   </a></span> 
  15.    
  16. <?php else: ?> 
  17.  <span class="disabled">&lt;&lt;</span>  
  18.   <span class="disabled">&lt;</span>   
  19. <?php endif; ?> 
  20.   
  21. <!-- Numbered page links --> 
  22. <?php foreach ($this->pagesInRange as $page): ?> 
  23.   <?php if ($page != $this->current): ?> 
  24.     <span><a href="<?php echo $this->url(array('page' => $page)); ?>"> 
  25.         <?php echo $page; ?> 
  26.     </a></span> 
  27.   <?php else: ?> 
  28.   <span class="pagesOn"> 
  29.     <?php echo $page; ?>  
  30.     </span> 
  31.   <?php endif; ?> 
  32. <?php endforeach; ?> 
  33.   
  34. <!-- Next page link --> 
  35. <?php if (isset($this->next)): ?> 
  36.   <span><a href="<?php echo $this->url(array('page' => $this->next)); ?>"> 
  37.      &gt; 
  38.   </a></span> 
  39.   <span><a href="<?php echo $this->url(array('page' => $this->pageCount)); ?>"> 
  40.      &gt;&gt; 
  41.   </a></span> 
  42. <?php else: ?> 
  43.   <span class="disabled">&gt;</span> 
  44.   <span class="disabled">&gt;&gt;</span> 
  45. <?php endif; ?> 
  46. </div> 
  47. <?php endif; ?> 

注:网上流传许多使用fetchAll()方法来查询所有的记录,然后使用$paginator = Zend_Paginator::factory($userArray);方法来定义$paginator,不可在数据量大的环境中使用,也就只能学习时使用!本文使用了

 $paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Null($count)); 

方式来定义$paginator效率高于factory方式!

如果提示找不到Zend_Paginator_Adapter_Null可手工加载一下:Zend_Loader::loadClass('Zend_Paginator_Adapter_Null');