如何自己在Fluid中生成分页链接

How to generate the pagination links in Fluid by myself

我有一个显示记录列表的 TYPO3 扩展。由于它超过 40 页,我想提供一个额外的字母索引,使访问者可以直接跳到字符的开头。

一般来说一切正常 - 除了 link 到第 n 页。

我有流体变量 cur 包含当前字符(例如 M)和 pageNumber 中的必要页码(例如 23)。

我怎样才能得到正确的 url 应该如下所示: https://mydomain.tld/path/to/list?tx_myextension_myextension[@widget_0][currentPage]=23&cHash=a6193a7eab129df4789343911221584b#jumplabel_M

任一

<a class="page-link" href="{f:uri.page(additionalParams:{tx_myextension_myextension{@widget_0:{currentPage:pageNumber}}})}#jmplabel_{cur}">{cur}</a>

也不

<a class="page-link" href="{f:uri.page(additionalParams:{tx_myextension_myextension[@widget_0][currentPage]:pageNumber})}#jmplabel_{cur}">{cur}</a>

调用 f:uri.page VH。结果是 href 参数中未替换的字符串。


<a class="page-link" href="{f:uri.page()}?tx_phonebook_phonebook[@widget_0][currentPage]={pageNumber}#jmplabel_{cur}">{cur}</a>

看起来不错,但缺少 cHash,因此导致 404 页面未找到。

查看 Georg Ringer 在他的新闻扩展中是如何做到的。实际上,这是您分页的解决方案。

PaginateAdditionalParamsViewHelper.php:
https://github.com/georgringer/news/blob/master/Classes/ViewHelpers/Widget/Ajax/PaginateAdditionalParamsViewHelper.php#L30

public function render()
{
    $page = (int)$this->arguments['page'];
    if ($page === 0) {
        return [];
    }
    $params = [
        'tx_news_pi1' => [
            '@widget_0' => [
                'currentPage' => $page
            ]
        ]
    ];

    return $params;
}

并且在一些模板中:
https://github.com/georgringer/news/blob/master/Resources/Private/Templates/Styles/Twb/Templates/ViewHelpers/Widget/Paginate/IndexAjax.html#L56,尤其是additionalParams键。

<f:widget.link data="{container:recordId,link:'{t:uri.ajaxAction(contextRecord:\'tt_content:{recordId}\', pluginName: \'pi1\',additionalParams:\'{n:widget.ajax.paginateAdditionalParams(page:0)}\')}'}">
    <f:translate key="paginate_previous" />
</f:widget.link>