【问题标题】:How to call a TYPO3 custom viewhelper from a typoscript (.ts) file and receive a response from viewhelper?如何从打字稿(.ts)文件中调用 TYPO3 自定义 viewhelper 并接收来自 viewhelper 的响应?
【发布时间】:2020-05-28 12:19:14
【问题描述】:

我试图从打字稿文件中调用 TYPO3 9.5.9 中的自定义视图助手。但它不起作用。 下面给出了一个viewhelper的例子:

<?php
namespace MyVendor\BlogExample\ViewHelpers;

use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;

class GravatarViewHelper extends AbstractViewHelper
{
   use CompileWithRenderStatic;

   public static function renderStatic(
       array $arguments,
       \Closure $renderChildrenClosure,
       RenderingContextInterface $renderingContext
   ) {
       return 'World';
   }
}

如何从打字稿 (.ts) 文件中调用此自定义 viewhelper 并获得响应?

【问题讨论】:

    标签: php typo3 typoscript typo3-9.x typo3-extensions


    【解决方案1】:

    我建议您将“执行 ViewHelper 所做的事情”的函数提取到一个单独的方法中,并使其可以作为公共方法调用此方法,并使其接收所需的 PHP 函数参数(用户电子邮件地址,例如)*包裹在array $parameters中。

    然后可以从 ViewHelper 和 TypoScript 调用此方法。 TypoScript 类似于:

    lib.myGravatarObject = USER
    lib.myGravatarObject.userFunc = MyVendor\ExtensionName\GravatarRenderer
    lib.myGravatarObject.userEmail = foo@bar.com
    

    如果您将 array $parameters 的属性命名为与您的 ViewHelper 参数相同,您可以简单地从 ViewHelper 中传递 $this-&gt;arguments$arguments(如果您正在实现 render(),则前者,如果您正在实现后者实施renderStatic())。它还使您在 TS 中使用与 ViewHelper 参数相同的属性名称更加透明。

    【讨论】:

      【解决方案2】:

      您可以将 FLUIDTEMPLATE cObject 与最小模板一起使用(例如,通过模板属性):

      10 = FLUIDTEMPLATE
      10 {
         template.cObject = TEXT
         template.cObject.value(
            <html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:mv="http://typo3.org/ns/MyVendor/BlogExample/ViewHelpers" data-namespace-typo3-fluid="true">
            <mv:GravatarViewHelper />
         )
      }
      

      这似乎是可能的。但正如 Bernd 已经问过的:为什么要这样做?

      【讨论】:

      • 好的,我想将一个字符串传递给 php 函数并接收另一个字符串作为响应。谢谢
      【解决方案3】:

      为什么要这样做? (请描述您的用例)

      Viewhelper 用于 FLUID 模板中,您有正确且匹配的上下文。

      如果您想直接在typoscript 中调用PHP 函数,您可以选择userfunc (manual)。但是您需要提供必要的上下文。

      【讨论】:

      • 好的。我想将一个字符串传递给 php 函数并接收另一个字符串作为响应。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      • 2016-11-02
      相关资源
      最近更新 更多