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:
public function lista( $sort, $direction ) { $adapter = new Zend_Paginator_Adapter_DbSelect( $this->select() ->setIntegrityCheck(false) ->from('top_orders') ->joinleft('top_orders_total', 'top_orders_total.orders_id = top_orders.orders_id', array( 'wartosc' => 'text') ) ->group('top_orders.orders_id') ->order( $sort.' '.$direction ) ); $adapter->setRowCount( $this->select()->setIntegrityCheck(false)->from( 'top_orders', Zend_Paginator_Adapter_DbSelect::ROW_COUNT_COLUMN => 'COUNT(orders_id)' ) ) ); return $adapter; }
Kontroler:
public function indexAction() { $direction = $this->_getParam('direction', 'DESC'); $sort = $this->_getParam('sort', 'date_purchased'); $zamowienia = new Zamowienia_Model_Sklepinternetowylista; $adapter = $zamowienia->lista( $sort, $direction ); $statusy = $zamowienia->Statusy(); $paginator = new Zend_Paginator ( $adapter ); $paginator->setItemCountPerPage( 50 )->setCurrentPageNumber( $this->_getParam( 'page', 1 ) ); $this->view->paginator = $paginator; $this->view->statusy = $statusy; $this->view->page = $paginator->getCurrentPageNumber(); $this->view->itemperpage = $paginator->getItemCountPerPage(); $this->view->direction = $direction == 'ASC' ? 'DESC' : 'ASC'; }
widok:
$i = 1 + ( $this->page * $this->itemperpage ) - $this->itemperpage; foreach ( $this->paginator as $item ) { echo '<td>'.($item['ups_exported'] == 1 ? '<img src="'.$this->basePath.'/gfx/ups.gif" alt="ups" />' : '').'</td>'; $i++; }