从Controller

时间:2017-10-13 07:21:30

标签: php typo3 fluid extbase typo3-extensions

我试图在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>&lt;</span>       </extlist:link.action>

然而 - 如果我尝试这个控制器我的页面将无法渲染,所以我假设php代码/函数调用有问题,甚至可能是键值对/第一个参数的语法?对不起,我不是php的专业人士

任何想法我怎样才能实现这一目标?我读到可能很难在其他控制器中使用ViewHelpers吗?

3 个答案:

答案 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