Mam 6 rekordów w kwerendzie i ten kod poprawnie wyświetlić je na 3 stronach:ZF2 paginator nie pokazują ostatnią stronę
(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; ?>
ale kiedy dodać pętlę foreach w akcji:
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 nie wyświetla ostatniej (3) strony (poprawnie wyświetlają się 1 i 2 strony). Dlaczego? Dziękujemy!
Jeśli dodać $ paginator-> getIterator() -> zwijanie po foreach() {} paginator Pokaż tylko pierwszą stronę i nie wykazują drugiej i trzeciej stronie.
dziwny problem ale dlaczego w Akcji masz nawet puste foreach? Jeśli usunąłeś kod, aby zmniejszyć ten przykład, mógłbyś usunąć problem! także pomyślałbym, że przejście przez kolejne posty byłoby bardziej efektywne? – CodeMonkey
W rzeczywistym projekcie foreach zawiera kod. – morin
@KodeMonkey '$ posts' zawiera wszystkie wiersze, w których' $ paginator' ma ograniczone pozycje (które będą wyświetlane na stronie). Aby uzyskać te elementy w "Akcji" przed wysłaniem do widoku, potrzebujesz takiej pętli (jak próbkowano powyżej jako pusta pętla lub '$ paginator-> getCurrentItems()' lub ''$ paginator-> getItemsByPage ($ strona)'), która daje wynik w pustych elementach '$ paginator'. – webcoder