2013-04-13 76 views
6

我有6條記錄的查詢和驗證碼正確顯示它3頁:ZF2分頁程序不顯示最後一頁

(action) 
    public function listAction() 
     { 
      $page = (int) $this->params()->fromRoute('id', 0); 
      $posts = $this->getPagesTable()->selectPages(); 
      $paginator = new Paginator(new PaginatorIterator($posts)); 
      $paginator->setCurrentPageNumber($page) 
         ->setItemCountPerPage(2) 
         ->setPageRange(7); 
      return new ViewModel(array(
        'paginator' => $paginator, 
        )); 
     } 
(view) 
    <?php foreach ($paginator as $post) : ?> 
     <h2><?php echo $this->escapeHtml($post->id); ?></h2> 
     <div><?php echo $this->escapeHtml($post->name);?> 
    <?php endforeach; ?> 

,但是當我添加foreach循環在行動:

public function listAction() 
{ 
    $page = (int) $this->params()->fromRoute('id', 0); 
    $posts = $this->getPagesTable()->selectPages(); 
    $paginator = new Paginator(new PaginatorIterator($posts)); 
    $paginator->setCurrentPageNumber($page) 
       ->setItemCountPerPage(2) 
       ->setPageRange(7); 
    foreach ($paginator as $post) { 
     // some code or empty foreach 
    }; 
    return new ViewModel(array(
      'paginator' => $paginator, 
      )); 
} 

paginator不顯示最後(3)頁(1和2頁顯示正確)。 爲什麼? 謝謝!


如果加$ paginator-> getIterator()方法 - >快退()後的foreach {},分頁程序只顯示第一頁,並且不顯示第二和第三頁。

+1

一個奇怪的問題,但爲什麼你甚至在行動中有一個空的foreach?如果您已經刪除了代碼以使該示例更小,那麼您可能已經刪除了該問題!我也會認爲循環$帖子會更有效率嗎? – CodeMonkey

+0

在實際項目中,foreach包含一些代碼。 – morin

+0

@CodeMonkey'$ posts'包含'$ paginator'具有有限項目(將在頁面上顯示)的所有行。要在發送到View之前將這些項目放在'Action'中,您需要這樣的循環(如上面的空循環或$ paginator-> getCurrentItems()或$'paginator-> getItemsByPage($ page)')在清空'$ paginator'項目。 – webcoder

回答

0

迭代器模式就像是一個指針,afeter你迭代,你必須重新設置。

+0

如何重置迭代器? – morin

+0

@morin試試這個:'$ paginator-> getIterator()方法 - >快退()' –

+0

如果加$ paginator-> getIterator()方法 - >快退()的foreach {},分頁程序只顯示第一頁後不顯示第二和第三頁。 – morin

0

我也面臨着同樣的問題

但現在我刪除此行是工作的罰款後問題

i am using iterator_to_array($userList); 
鑑於頁面

可能這是有幫助的,你