首页 > 解决方案 > 如何自己在 Fluid 中生成分页链接

问题描述

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

一般来说,一切正常 - 除了第 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.pageVH。结果是 href 参数中未替换的字符串。


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

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

标签: hyperlinkpaginationtypo3typo3-9.x

解决方案


查看 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>

推荐阅读