【问题标题】:Call ViewHelper from Controller从控制器调用 ViewHelper
【发布时间】:2017-10-13 07:21:30
【问题描述】:

我正在尝试从 Typo3 的控制器中调用 ViewHelper 函数(以添加一些额外的标头数据)

基地是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 可能很困难?

【问题讨论】:

    标签: php typo3 fluid extbase typo3-extensions


    【解决方案1】:

    有一个 ViewHelperInvoker 类可用于在控制器中呈现 viewhelper:

        $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

    【讨论】:

      【解决方案2】:

      Viewhelper 不应该在 Fluid 模板之外使用。

      但是,可能有一种更简单的方法可以实现您想要的,例如与HeaderAssets。这样,您可以从控制器操作或页面模板中轻松地将 sn-ps 添加到页面的&lt;head&gt;

      【讨论】:

      • 如果我理解正确,这是针对typo3 8.x.x. 的,对吗?没提过,我用的是typo3 7.6.x
      • 正确,这仅适用于 TYPO3 v8 及更新版本。
      【解决方案3】:

      请真的不要那样做。您可以使用PageRenderer。例如。使用

      $pageRenderer = GeneralUtility::makeInstance(PageRenderer::class);
      $pageRenderer->addHeaderData($headerData);
      

      【讨论】:

      • 好的,很好的提示,但实际上这对我的问题没有帮助,因为我无法获得正确的$headerData,而不是将它们添加到我的&lt;head&gt; 部分
      猜你喜欢
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多