2013-04-13 2 views
6

У меня есть 6 записей в запросе, и этот код правильно показать его на 3 страницах:ZF2 Paginator не показывать последнюю страницу

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

, но когда я добавляю петлю Еогеасп в действии:

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() -> (перемотка назад) после Еогеасп {}, Paginator показать только первую страницу и не показывают второй и третьей страницах.

+1

странная проблема, но почему у вас даже есть пустой foreach в Action? Если вы удалили код, чтобы уменьшить пример, возможно, вы устранили проблему! также я бы подумал, что цикл через $ posts был бы более эффективным? – CodeMonkey

+0

В реальном проекте foreach включает некоторый код. – morin

+0

@CodeMonkey '$ posts' содержит все строки, в которых' $ paginator' имеют ограниченные элементы (которые будут отображаться на странице). Чтобы получить эти элементы в «Action» перед отправкой на просмотр, вам нужен такой цикл (как выбранный выше как пустой цикл или '$ paginator-> getCurrentItems()' или ''$ paginator-> getItemsByPage ($ page)'), который приводит в пустых элементах '$ paginator'. – webcoder

ответ

0

Итератор-паттерн, как указатель, вы повторите попытку перезагрузки.

+0

Как сбросить итератор? – morin

+0

@morin попробуйте следующее: '$ paginator-> getIterator() -> rewind()' –

+0

, если добавить $ paginator-> getIterator() -> rewind() после foreach {}, paginator показать только первую страницу и не показывать второй и третьей. – morin

0

Я также столкнулся с такой же вопрос

Но теперь я решил

i am using iterator_to_array($userList); 

в странице просмотра после удаления этой строки она работает отлично может быть это полезно вам

Смежные вопросы