2013-04-13 35 views
6

Tôi có 6 bản ghi trong truy vấn và mã này hiển thị một cách chính xác nó trên 3 trang:ZF2 paginator không hiển thị cuối trang

(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; ?> 

nhưng khi tôi thêm vòng lặp foreach trong hành động:

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 không hiển thị trang cuối (3) (1 và 2 trang hiển thị chính xác). Tại sao? Cảm ơn bạn!


Nếu thêm $ paginator-> getIterator() -> rewind() sau foreach {}, paginator chỉ hiển thị trang đầu tiên và không hiển thị trang thứ hai và thứ ba.

+1

một vấn đề lạ, nhưng tại sao bạn thậm chí có một lời rao giảng trống rỗng trong Hành động? Nếu bạn đã xóa mã trong đó để làm ví dụ nhỏ hơn, bạn có thể đã xóa sự cố! Tôi cũng có thể nghĩ rằng looping thông qua $ bài viết sẽ có hiệu quả hơn? – CodeMonkey

+0

Trong dự án thực, dự án bao gồm một số mã. – morin

+0

@CodeMonkey '$ posts' chứa tất cả các hàng có' $ paginator' có các mục bị giới hạn (sẽ hiển thị trên trang). Để nhận các mục đó trong 'Hành động' trước khi gửi để xem, bạn cần vòng lặp đó (như được lấy mẫu ở trên dưới dạng vòng trống hoặc' $ paginator-> getCurrentItems() 'hoặc' '$ paginator-> getItemsByPage ($ page) ') để trống các mục '$ paginator'. – webcoder

Trả lời

0

Mẫu trình vòng lặp giống như một con trỏ, bạn lặp lại bạn phải đặt lại.

+0

Làm cách nào để đặt lại trình lặp? – morin

+0

@morin thử điều này: '$ paginator-> getIterator() -> rewind()' –

+0

nếu thêm $ paginator-> getIterator() -> rewind() sau foreach {}, paginator chỉ hiển thị trang đầu tiên và không hiển thị trang thứ hai và thứ ba. – morin

0

Tôi cũng phải đối mặt với cùng một vấn đề

Nhưng bây giờ tôi đang giải quyết

i am using iterator_to_array($userList); 

trong lần xem trang sau khi gỡ bỏ dòng này nó đang làm việc tốt có thể đây là hữu ích bạn

Các vấn đề liên quan