Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF]paginacja
Forum PHP.pl > Forum > PHP > Frameworki
johnyMajster
Witam czytam sobie o paginacji ZF i nachodzi mnie taka myśl że jest to strasznie nie efektywne poniewaz pobiera wszystkie rekordy z bazy.
Czy mozna pobierac rekordy stronami??
A to przykład z ksiazki Easy php websites
  1. 01 function getGamesByPlatform($id, $page=1, $order="title")
  2. 02 {
  3. 03 $query = $this->select();
  4. 04 $query->where('platform_id = ?', $id);
  5. 05 $query->order($order);
  6. 06
  7. 07 $paginator = new Zend_Paginator(new Zend_Paginator_Adapter_DbTableSelect($query));
  8. 08 $paginator->setItemCountPerPage($paginationCount);
  9. 09 $paginator->setCurrentPageNumber($page);
  10. 10 return $paginator;
  11. 11 }
nospor
Cytat
Witam czytam sobie o paginacji ZF i nachodzi mnie taka myśl że jest to strasznie nie efektywne poniewaz pobiera wszystkie rekordy z bazy.
yyy, a skąd ci to przyszło do głowy? Paginacja przy pomocy ZF nie polega na pobraniu wszystkiego, a tylko wybranych rekordów
viking
A skąd myśl że pobiera wszystkie? Podepnij debugger DB i zobacz jakie zapytania masz tworzone.
johnyMajster
Jak podpina sie debuger?

W tym przykładzie co podałem robi sie najpierw query. Załóżmy ze chce miec 5 rekordów na każdej stronie. No ot musze pobrac iles rekordów np 100 i paginator będzie mi z tych 100 wybierał tak?? A co jak uzytkownik chce zobaczyc jeszcze starsze rekordy i mu ta setka nie wystarczy??
nospor
Czemu uważasz, że o to:
new Zend_Paginator_Adapter_DbTableSelect($query)
lub to:
$query = $this->select();
$query->where('platform_id = ?', $id);
$query->order($order);

powoduje wykonanie zapytania? Skąd wysnuwasz takie wnioski?
johnyMajster
Hm rzeczywiscie nie ma tam fetch?? W takim razie nie rozumiem jak to działa bo do widoku autor przekazuje cos takiego:
  1. $game = new Default_Game_Model();
  2. $this->view->platformGames = $game->getGamesByPlatform($platform, $page);


A widok tak wygląda
  1. <?php if (count($this->platformGames) > 0) { ?>
  2. <?php foreach ($this->platformGames AS $game) { ?>
  3. echo "{$game->name} <br />";
  4. <?php } ?>
  5. <?php } ?>
nospor
$game->getGamesByPlatform ta funkcja zwraca ci obiekt $paginator. No a $paginator zwraca ci już dane jakie chcesz. Nie bardzo rozumiem czego nie rozumiesz....
Paginator wykonuje select ale pobiera tylko dane z danej strony. Do tego celu używa LIMIT. Robi to wewnątrz siebie, tak że ty tego nie widzisz... Czemu doszukujesz się tu jakiegoś podstępu?
viking
I jeszcze link http://framework.zend.com/manual/1.12/en/z...b.profiler.html
johnyMajster
Dzieki za wszystkie odpowedzi.

Pojawiło sie kolejne pytanie. Załóżmy ze mam 30 rekordów i paginacje robie po dziesiec rekordów.

W momencie gdy usune rekord z np pierwszej strony, w bazie pozostanie 29 rekordów. Gdyby również na pierwszej stronie był guzik który wykona akcje dodaj kolejne dziesiec rekordów i został klikniety na stronie widac było by 19 rekordów przy czym jednego by brakowało poniewaz guzik zrobił by paginacje strony drugiej wg rekordów istniejących w bazie(juz po usunieciu).
Zostałby pominiety dawny rekord 11. Poniewaz teraz byłby on rekordem 10 nalezącym do pierwszej strony.

Co sie robi w takich sytuacjach??
nospor
Nic się nie robi,bo i po co? smile.gif
johnyMajster
to jak działa na FB dodawanie postów od strony php?? Zdarzenie wywołuje dołączenie postów z następnej strony ale wszystkie sie zgadzają. Są w odpowiedniej kolejnosci nawet po usunieciu posta z pierwszej strony
nospor
Nigdzie nie widziałem by fb miał jakieś strony. On poprostu doczytuje kolejne posty. A robi to zapewne na podstawie daty ostatniego widocznego lub jego id
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.