繁体   English   中英

如何从拼写错误 (.ts) 文件调用 TYPO3 自定义 viewhelper 并从 viewhelper 接收响应?

[英]How to call a TYPO3 custom viewhelper from a typoscript (.ts) file and receive a response from viewhelper?

我试图从 typoscript 文件调用 TYPO3 9.5.9 中的自定义 viewhelper。 但它不起作用。 下面给出了 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 并获得响应?

我建议您将“执行 ViewHelper 的操作”的 function 提取到一个单独的方法中,并使其可以将此方法作为公共方法调用,并使其接收所需的 PHP function arguments(例如,用户 email 地址) *包装在array $parameters中。

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

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

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

您可以使用带有最小模板的 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 已经问过的:为什么要那样做?

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

Viewhelpers 用于 FLUID 模板,那里有正确且匹配的上下文。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM