zend framework 分頁(Zend_Paginator_Adapter_Null定義 $paginator )

網上很少有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');

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章