[英]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.