如何自己在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>
我有一个显示记录列表的 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>