Fluid: Blätterfunktion ohne Widget „paginate“

Wie man das Widget „paginate“ nutzt, kann man unter anderem auf typo3blogger.de nachlesen. Wenn man dieses Widget aber nicht einsetzen kann, z.B. weil man die Datenbankabfrage im Repository mit

$query->statement("SELECT * FROM...");

erzeugt, muss man den Pager selbst erzeugen, hier eine mögliche Vorgehensweise:

Pager-Array generieren

EXT:myExt/Classes/Controller/MyController.php

/**
 * action list
 *
 * @param integer $page: paginator, starts with 0
 * @return void
 */
public function listAction($page = 0) {
    $page = (int)$page;
    $this->view->assign('page', $page);
    $myRecords = $this->objectManager->get(\Vendor\MyExt\Domain\Repository\MyRepository::class)->myQuery();
    $this->view->assign('myRecords', $myRecords);
    // generate pager
    if($myRecords->count()) {
        $paginate = array();
        for($i = 0; $i < $myRecords->count(); $i += (int)$this->settings['pager']['itemsPerPage']) {
            $paginate[] = $i;
        }
        $this->view->assign('paginate', $paginate);
    }
}

TypoScript Setup für Berechnungen in Fluid

Für den Pager werden im Fluid Template Berechnungen durchgeführt. Da Fluid selbst keine Berechnungen durchführen kann, wird dies über TypoScript erledigt.

EXT:myExt/Configuration/TypoScript/setup.txt

plugin.tx_myext {
    math = TEXT
    math {
        current = 1
        prioriCalc = 1
    }
}

Pager als Partial

EXT:myExt/Resources/Private/Partials/Pager/Pager.html

<f:if condition="{paginate->f:count()} > 1">
    <f:alias map="{
        paginateMax:  '{f:cObject(typoscriptObjectPath: \'plugin.tx_myext.math\', data: \'{paginate->f:count()}-1\')}',
        paginatePrev: '{f:cObject(typoscriptObjectPath: \'plugin.tx_myext.math\', data: \'{currentPage}-1\')}',
        paginateNext: '{f:cObject(typoscriptObjectPath: \'plugin.tx_myext.math\', data: \'{currentPage}+1\')}'
        }">
        <ul class="tx_myext-list-browse">
            <f:if condition="{currentPage} > 0">
                <li class="first">
                    <f:link.action addQueryString="1" arguments="{page: '0'}">
                        &lt;&lt;
                    </f:link.action>
                </li>
                <li class="prev">
                    <f:link.action addQueryString="1" arguments="{page: paginatePrev}">
                        &lt;
                    </f:link.action>
                </li>
            </f:if>
            <f:for each="{paginate}" as="paginateItem" key="p" iteration="i">
                <li>
                    <f:link.action addQueryString="1" arguments="{page: p}" class="{f:if(condition: '{p} == {currentPage}', then: 'active')}">
                        {i.cycle}
                    </f:link.action>
                </li>
            </f:for>
            <f:if condition="{currentPage} < {paginateMax}">
                <li class="next">
                    <f:link.action addQueryString="1" arguments="{page: paginateNext}">
                        &gt;
                    </f:link.action>
                </li>
                <li class="last">
                    <f:link.action addQueryString="1" arguments="{page: paginateMax}">
                        &gt;&gt;
                    </f:link.action>
                </li>
            </f:if>
        </ul>
    </f:alias>
</f:if>

Einbindung des Partials im Template

Im Template wird der Pager eingebunden und nur die Datensätze der gewählten Seite ausgegeben.

EXT:myExt/Resources/Private/Templates/MyController/List.html

<f:if condition="{myRecords}">
    <f:render partial="Pager/Pager" arguments="{paginate:paginate, currentPage:page}" />
    <f:for each="{myRecords}" as="myRecord" iteration="i">
        <f:if condition="{i.index} >= {f:cObject(typoscriptObjectPath: 'plugin.tx_myext.math', data: '{page}*{settings.pager.itemsPerPage}')}">
            <f:if condition="{i.index} < {f:cObject(typoscriptObjectPath: 'plugin.tx_myext.math', data: '({page}+1)*{settings.pager.itemsPerPage}')}">
                Record UID: {myRecord.uid}
            </f:if>
        </f:if>
    </f:for>
</f:if>

 

Autor:
Geändert: Dienstag, 11. Oktober 2016 11:50 Uhr
Erstellt: Freitag, 18. Juli 2014 12:48 Uhr
Tags: , , , , , , ,
Themengebiet: Web Entwicklung, TYPO3, TYPO3 Extension-Programmierung

Trackback: Trackback-URL LoadingZu Favoriten hinzufügen

Kommentar abgeben