PaginateController

Prinzipiell geht das Paging auch mit Fluid - aber nur wenn man die Extbase Queries verwendet und keine eigenen SQLs in den Repositories verwendet:

<f:widget.paginate objects="{projects}" as="paginatedProjects" configuration="{itemsPerPage: 10, insertAbove: 0, insertBelow: 1, maximumNumberOfLinks: 15}">

Allerdings sind die Texte allesamt auf Englisch und nicht übersetzbar. Die Lösung ist ein eigenes Template zu konfigurieren. Dies ist nicht allzu trivial.

Controller

Es muss ein eigener Controller angelegt werden ohne eigenen Inhalt.

Classes/ViewHelpers/Widget/Controller/PaginateController.php:

<?php
class Tx_Rsyssocialprojects_ViewHelpers_Widget_Controller_PaginateController extends Tx_Fluid_ViewHelpers_Widget_Controller_PaginateController {
}
?>

Mann muss ihn noch per TS bekannt machen:

config.tx_extbase.objects {
    Tx_Fluid_ViewHelpers_Widget_Controller_PaginateController {
        className = Tx_Rsyssocialprojects_ViewHelpers_Widget_Controller_PaginateController
    }
}

Dann wird wohl ein Template verwendet welches man anlegen muss:

Resources/Private/Templates/ViewHelpers/Widget/Paginate/Index.html:

<f:if condition="{configuration.insertAbove}">
    <f:render section="paginator" arguments="{pagination: pagination}" />
</f:if>

<f:renderChildren arguments="{contentArguments}" />

<f:if condition="{configuration.insertBelow}">
    <f:render section="paginator" arguments="{pagination: pagination}" />
</f:if>

<f:section name="paginator">
    <ul class="f3-widget-paginator">
        <f:if condition="{pagination.previousPage}">
            <li class="previous">
                <f:if condition="{pagination.previousPage} > 1">
                    <f:then>
                        <f:widget.link arguments="{currentPage: pagination.previousPage}">&lt;|</f:widget.link>
                    </f:then>
                    <f:else>
                        <f:widget.link>&lt;|</f:widget.link>
                    </f:else>
                </f:if>
            </li>
        </f:if>
        <f:if condition="{pagination.displayRangeStart} > 1">
            <li class="first">
                <f:widget.link>1</f:widget.link>
            </li>
        </f:if>
        <f:if condition="{pagination.hasLessPages}">
            <li>...</li>
        </f:if>
        <f:for each="{pagination.pages}" as="page">
            <f:if condition="{page.isCurrent}">
                <f:then>
                    <li class="current">
                        {page.number}
                    </li>
                </f:then>
                <f:else>
                    <li>
                        <f:if condition="{page.number} > 1">
                            <f:then>
                                <f:widget.link arguments="{currentPage: page.number}">{page.number}</f:widget.link>
                            </f:then>
                            <f:else>
                                <f:widget.link>{page.number}</f:widget.link>
                            </f:else>
                        </f:if>
                    </li>
                </f:else>
            </f:if>
        </f:for>
        <f:if condition="{pagination.hasMorePages}">
            <li>...</li>
        </f:if>
        <f:if condition="{pagination.displayRangeEnd} < {pagination.numberOfPages}">
            <li class="last">
                <f:widget.link arguments="{currentPage: pagination.numberOfPages}">{pagination.numberOfPages}</f:widget.link>
            </li>
        </f:if>
        <f:if condition="{pagination.nextPage}">
            <li class="next">
                <f:widget.link arguments="{currentPage: pagination.nextPage}">|&gt;</f:widget.link>
            </li>
        </f:if>
    </ul>
</f:section>

Hier kann man nun die Texte nach belieben setzen. Ich habe sie hardcodiert im Template (|&gt; usw.)

Erstellt: 09/2012| Geändert: 10/2015