我试图在Typo3中的Controller中调用ViewHelper函数(添加一些额外的头数据)
Base是Yag Gallery。
我编辑了ItemListController.php并添加了以下内容:
$pager = $this->extListContext->getPagerCollection();
$prevLinkUid = $pager->getPreviousPage();
$arg = Tx_YAG_ViewHelpers_Namespace_GPArrayViewHelper::render([page:$prevLinkUid], $pager)
$test = '<link rel="test" href="' . $arg . '">';
$this->response->addAdditionalHeaderData($test);
addAdditionalHeaderData函数适用于其他数据(例如$prevLinkUid
,因此此部分运行良好)。
如果我正确理解GPArrayViewHelper::render的语法,我需要一个pageUid作为第一个参数,pagerCollection作为第二个参数(从Resources/Private/Partials/Pager/Default.html
中的这个调用派生出来 <extlist:link.action controller="{controller}" action="{action}" arguments="{extlist:namespace.GPArray(object:'{pagerCollection}' arguments:'page:{pager.previousPage}')}"><span><</span> </extlist:link.action>
)
然而 - 如果我尝试这个控制器我的页面将无法渲染,所以我假设php代码/函数调用有问题,甚至可能是键值对/第一个参数的语法?对不起,我不是php的专业人士
任何想法我怎样才能实现这一目标?我读到可能很难在其他控制器中使用ViewHelpers吗?
答案 0 :(得分:0)
Viewhelpers不应在Fluid模板之外使用。
但是,可能有一种更简单的方法来实现您想要的效果,例如:与HeaderAssets
。这样,您就可以在控制器操作或页面模板中轻松地将代码段添加到页面的<head>
。
答案 1 :(得分:0)
请真的不要那样。你可以做的是使用PageRenderer
。例如。使用
$pageRenderer = GeneralUtility::makeInstance(PageRenderer::class);
$pageRenderer->addHeaderData($headerData);
答案 2 :(得分:0)
有一个 ViewHelperInvoker 类,可用于在控制器中呈现视图助手:
$viewHelperInvoker = GeneralUtility::makeInstance(\TYPO3Fluid\Fluid\Core\ViewHelper\ViewHelperInvoker::class);
$result = $viewHelperInvoker->invoke(
\TYPO3\CMS\Fluid\ViewHelpers\Format\CurrencyViewHelper::class,
[ 'currencySign' => '€' ],
new \TYPO3\CMS\Fluid\Core\Rendering\RenderingContext(),
function() {
return 12345.67;
}
);
https://github.com/TYPO3/Fluid/blob/master/src/Core/ViewHelper/ViewHelperInvoker.php