Dieser Eintrag wurde geschrieben am Montag, 17. November 2008 um 01:15 unterhalb der Kategorie PHP, Zend-Framwork. Die Antworten kannst Du mit dem RSS 2.0 Feed verfolgen. Du kannst hier einen Kommentar hinterlassen oder von deiner Site ein trackback setzen.
In diesem Artikel möchte ich zusätzlich zur deutschen Dokumentation ein kleines simples Beispiel veröffentlichen wie man seitenweise Daten mittels Zend_Paginator realisiert. Das Beispiel ist mit einem assoziativem Array umgesetzt. In einem demnächst folgendem Beispiel werde ich dies direkt mit einem Zend_Db_Select Ergebnis veröffentlichen.
Zuerst sollte man sich entscheiden wie Zend_Paginator die Seitenzahlen darstellen soll. Hierzu legt man ein View-Script mit der entsprechenden Formatierung an:
< ?php if ($this->pageCount): ?> <div class="paginationControl"> < ?= $this->firstItemNumber; ?> - < ?= $this->lastItemNumber; ?> von < ?= $this->totalItemCount; ?> <!-- First page link --> < ?php if (isset($this->previous)): ?> <a href="<?= $this->url(array('page' => $this->first)); ?>">Erste</a> | < ?php else: ?> <span class="disabled">Erste</span> | < ?php endif; ?> <!-- Vorheriger Seitenlink --> < ?php if (isset($this->previous)): ?> <a href="<?= $this->url(array('page' => $this->previous)); ?>">< Vorheriger</a> | < ?php else: ?> <span class="disabled">< Vorheriger</span> | < ?php endif; ?> < ?php foreach ($this->pagesInRange as $page): ?> < ?php if ($page != $this->current): ?> <a href="<?= $this->url(array('page' => $page)); ?>">< ?= $page; ?></a> | < ?php else: ?> < ?= $page; ?> | < ?php endif; ?> < ?php endforeach; ?> <!-- Next page link --> < ?php if (isset($this->next)): ?> <a href="<?= $this->url(array('page' => $this->next)); ?>">Nächster ></a> | < ?php else: ?> <span class="disabled">Nächster ></span> | < ?php endif; ?> <!-- Last page link --> < ?php if (isset($this->next)): ?> <a href="<?= $this->url(array('page' => $this->last)); ?>">Letzte</a> < ?php else: ?> <span class="disabled">Letzte</span> < ?php endif; ?> </div> < ?php endif; ?> |
Das mittels CSS anpassbare Ergebnis sieht ähnlich wie folgend aus:
Damit Zend_Paginator arbeiten kann brauchts selbstverständlich noch Daten, in dem dieser iterieren kann. Die einfachste Weise ist ein Array an Zend_Paginator zu übergeben über dem dann seitenweise iteriert werden kann. Im Controller übergeben wir deshalb das Array mit den Daten an dem Paginator, übergeben Zend_Paginator die aktuelle Seitenzahl und weisen das fertige Objekt der View zu:
public function indexAction() { $data= $this->getData(); // Gibt ein assoziatives Array mit Daten zurueck $paginator = Zend_Paginator::factory($data); $page = (int) $this->_request->getParam('page'); $page = ($page > 1) ? $page : 1; $paginator->setCurrentPageNumber($page); $this->view->paginator = $paginator; } |
Zum Schluss benötigt man lediglich noch das View-Script zur Darstellung der Daten aus dem Array inklusive der von Zend_Paginator erzeugten Links mit den Seitenzahlen:
< ?php if (count($this->paginator)): foreach($this->paginator as $data): ?> <div style="float:left;width:100px;">< ?= $data['key1'] ?></div> <div style="width:220px;">< ?= $data['key2'] ?></div> <br style="clear:left;" /> < ?php endforeach; ?> <div style="border-top:1px solid #000;">< ?= $this->paginationControl($this->paginator, 'Sliding', 'paginate.phtml'); ?></div> |
Selbstverständlich gibt es noch einige andere Features die Zend_Paginator bietet und natürlich kann der Zend_Paginator auch direkt mit einem Zend_Db_Select-Objekt iterieren ohne dass man erst die Zeilen sich zurückgeben lassen muss. Hiermit möchte ich direkt auf die Dokumentation von Zend_Paginator verweisen.