Przeczytałem, że Pagerfanta jest wtyczką do paginacji z wyboru dla Symfony2, ale mam pewne problemy z jej poprawnym działaniem. Pobrałem kod dla pagerfanta i PagerfantaBundle i zainstalowałem je zgodnie z opisem w WhiteOctober Github readme file i this tutorial. Jestem pewien, że kod w moim kontrolerze jest w porządku, ale coś jest nie tak z moim plikiem szablonu.Jaki jest poprawny sposób użycia pagera w paginacji w Symfony2
Moje kod kontrolera:
public function indexAction($page = null)
{
...
$query = $em->createQuery('SELECT something FROM some_table');
$adapter = new DoctrineORMAdapter($query);
$pager = new Pagerfanta($adapter);
$pager->setMaxPerPage(10);
if (!$page) $page = 1;
try {
$pager->setCurrentPage($page);
}
catch(NotValidCurrentPageException $e) {
throw new NotFoundHttpException('Illegal page');
}
return $this->render('MyBundle:MyEntity:index.html.twig', array(
'pager' => $pager,
));
}
W moim szablonu:
...
<table>
{% for object in pager.currentPageResults %}
<tr>
<td>{{ object.attribute1 }}</td>
<td>{{ object.attribute2 }}</td>
<td>{{ object.attribute3 }}</td>
</tr>
{% endfor %}
</table>
{% if pager.haveToPaginate %}
{{ pagerfanta(pager) }}
{% endif %}
Kiedy idę do strony, dostaję listę pierwszych 10 obiektów. Jednak renderowanie pager'a jest po prostu PreviousNext jako jedno słowo (nie łączy i nie ma stron 1, 2, 3 itd.).
Jeśli dodaję ?page=2
do adresu URL, nie wyświetli kolejnych 10 pozycji na liście.
nie zmienić trasę od tego, co było przed I dodaje kod paginacji ponieważ dokumentacja mówi:
Trasy są generowane automatycznie na aktualnej trasie za pomocą zmiennej „stronę”, aby propagować numer strony.
... ale zastanawiam się, czy nieprawidłowe trasowanie jest częścią problemu. Zakładając, że tak jest, nie jestem pewien, jak to zrobić.
Nie mogę znaleźć instrukcji innych źródeł, z którymi się łączyłem, więc byłoby wspaniale, gdyby ktoś, kto wdrożył to pomyślnie, mógł podzielić się szczegółami, jak to zrobili.
Czy ty wzór trasa zawierać atrybut strony? ie '/ articles/{page}' – AdrienBrault
Aktualizacja: Wydaje się, że istnieje problem z kontrolerem. W szczególności DocrtineORMAdapter nie działa poprawnie (np. '$ Pagerfanta-> getNbResults()' zwraca 0 - stąd brak stron między Prevous i Next). Dokumentacja stwierdza, że parametr przekazany do konstruktora może być Query lub QueryBuilder, ale podejrzewam, że tylko ten drugi jest poprawny. Kiedy zmienię na '$ pagerfanta = new Pagerfanta (new ArrayAdapter ($ query-> getResult())' zwraca poprawną liczbę wyników. @AdrienBrault - Wprowadziłem zmianę, którą zasugerowałeś do wzoru trasy i teraz działa, ale nie powinno być potrzebne –
Tak więc nadal pozostaję z pytaniami, dlaczego?page = nie jest automatycznie dodawany do trasy zgodnie z dokumentacją i dlaczego css nie jest stosowana (obecnie paginator wygląda Poprzednia123Następna, bez spacji lub formatowania) –