Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [zf] Wolne działanie paginatora
Forum PHP.pl > Forum > PHP > Frameworki
lubski
Witam. Mam dziwny problem z paginatorem. Wyciąganie w layoucie danych trwa strasznie wolno. Około 6 sekund.
Sprawdzałem i zapytanie w bazie danych jest wykonywane bardzo szybko.

W czym jest problem? Przecież to zwykła funkcja foreach.
Dane wyświetlają się poprawnie po kliknięciu na numer strony. Więc paginacja działa.
Może mam jakieś złe parametry i z bazy wyciągane są wszystkie rekordy o później w php jest wykonywana paginacja ?
Po to użyłem metody setRowCount i select z adaptera aby liczyć ilość rekordów z bazy.


Sprawdziłem jescze profilerem czas wykonania tych zapytań:
Executed 2 queries in 0.010357141494751 seconds

Ma ktoś pomysł o co biega ?

model:

  1. public function lista( $sort, $direction )
  2. {
  3. $adapter = new Zend_Paginator_Adapter_DbSelect( $this->select()
  4. ->setIntegrityCheck(false)
  5. ->from('top_orders')
  6. ->joinleft('top_orders_total', 'top_orders_total.orders_id = top_orders.orders_id', array( 'wartosc' => 'text') )
  7. ->group('top_orders.orders_id')
  8. ->order( $sort.' '.$direction ) );
  9.  
  10. $adapter->setRowCount(
  11. $this->select()->setIntegrityCheck(false)->from(
  12. 'top_orders',
  13. Zend_Paginator_Adapter_DbSelect::ROW_COUNT_COLUMN => 'COUNT(orders_id)'
  14. )
  15. )
  16. );
  17. return $adapter;
  18. }


Kontroler:

  1. public function indexAction()
  2. {
  3.  
  4. $direction = $this->_getParam('direction', 'DESC');
  5. $sort = $this->_getParam('sort', 'date_purchased');
  6.  
  7. $zamowienia = new Zamowienia_Model_Sklepinternetowylista;
  8. $adapter = $zamowienia->lista( $sort, $direction );
  9. $statusy = $zamowienia->Statusy();
  10.  
  11. $paginator = new Zend_Paginator ( $adapter );
  12. $paginator->setItemCountPerPage( 50 )->setCurrentPageNumber( $this->_getParam( 'page', 1 ) );
  13.  
  14. $this->view->paginator = $paginator;
  15. $this->view->statusy = $statusy;
  16. $this->view->page = $paginator->getCurrentPageNumber();
  17. $this->view->itemperpage = $paginator->getItemCountPerPage();
  18. $this->view->direction = $direction == 'ASC' ? 'DESC' : 'ASC';
  19.  
  20.  
  21.  
  22. }

widok:
  1. $i = 1 + ( $this->page * $this->itemperpage ) - $this->itemperpage;
  2. foreach ( $this->paginator as $item )
  3. {
  4.  
  5. echo '<tr>';
  6. echo '<td>'.$i.'</td>';
  7. echo '<td>'.$item['customers_name'].'</td>';
  8. echo '<td>'.$item['orders_id'].'</td>';
  9. echo '<td>'.round($item['wartosc'], 2).' '.$item['currency'].'</td>';
  10. echo '<td></td>';
  11. echo '<td>'.$item['date_purchased'].'</td>';
  12. echo '<td>'.$item['orders_send_date'].'</td>';
  13. echo '<td>'.$this->statusy[$item['orders_status_wlasny']].'</td>';
  14. echo '<td>'.($item['ups_exported'] == 1 ? '<img src="'.$this->basePath.'/gfx/ups.gif" alt="ups" />' : '').'</td>';
  15. echo '</tr>';
  16. $i++;
  17. }
Daimos
z tego co pamiętam, to paginator sam sobie robi count`a, więc nie wiem po co robisz dwa zapytania.
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.