Seit der Beta1 von TYPO3 4-5 gibt es mit dem Paginator ein tolles Fluid-Widget, mit dem ein Pagebrowser bei Extbase-Extensions möglich ist. Das Snippet ist einfach zu konfigurieren und funktioniert tadellos.
Ein einfaches Beispiel schaut folgendermaßen aus:
<f:widget.paginate objects="{news}" as="paginatedNews"> <f:for each="{paginatedNews}" as="newsItem"> <f:render partial="List/Item" arguments="{newsItem: newsItem}"/> </f:for> </f:widget.paginate>
Zur Erklärung: Über die news-Objekte wird ein Pagebrowser gelegt indem dem Paginate-Viewhelper die Objekte übergeben werden. Wie bei einem for-each Viewhelper wird ein Name angegeben über den die Objekte anschließend angesprochen werden – in dem Fall „paginatedNews“. Diese können dann wie bereits bekannt gerendered werden, zB über ein Partial.
Konfiguration
Die Konfiguration ist noch sehr simpel, aber für die meisten Fälle ausreichend.
<f:widget.paginate objects="{news}" as="paginatedNews" configuration="{itemsPerPage: 5, insertAbove: 1, insertBelow: 1}">
- itemsPerPage legt die maximale Anzahl der Objekte fest
- insertAbove: Ob der Pagebrowser über den Objekten ausgegeben werden soll
- insertBelow: Ob der Pagebrowser unter den Objekten ausgegeben werden soll
Technischer Hintergrund
Auf dem ersten Blick mag der Code performanceintensiv ausschauen, aber das ist nicht der Fall, denn es finden nur die allernotwendigsten Datenbankabfragen statt. Mehr dazu steht u.a. in den Changelogs von fluid, siehe https://svn.typo3.org/TYPO3v4/CoreProjects/MVC/fluid/trunk/ChangeLog.txt.
Ausblick
Aktuell ist es noch nicht möglich, das dahinterstehende Template (fluid\Resources\Private\Templates\ViewHelpers\Widget\Paginate\Index.html) zu überschreiben, das wird sich aber noch bis zur finalen Version von TYPO3 4-5 ändern, siehe http://forge.typo3.org/issues/10823.