我试图从一个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';
}
}如何从typoscript (.ts)文件中调用此自定义viewhelper并获得响应?
发布于 2020-05-31 21:20:25
我建议您将“做ViewHelper所做的事情”的函数提取到一个单独的方法中,并使其能够作为公共方法调用此方法,并使其接收包装在array $parameters中的所需的PHP函数参数(例如,用户电子邮件地址)。
然后,可以从ViewHelper和TypoScript调用此方法。TypoScript应该是这样的:
lib.myGravatarObject = USER
lib.myGravatarObject.userFunc = MyVendor\ExtensionName\GravatarRenderer
lib.myGravatarObject.userEmail = foo@bar.com如果将array $parameters的属性命名为与ViewHelper参数相同的名称,则只需从ViewHelper中传递$this->arguments或$arguments (如果实现的是render(),则传递的是前者;如果实现的是renderStatic(),则传递的是后者)。它还使得在TS中使用与ViewHelper参数相同的属性名变得更加透明。
发布于 2020-05-28 21:58:25
您可以使用带有最小模板的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 />
)
}这似乎是可能的。但正如贝恩德已经问过的:为什么要这样做?
发布于 2020-05-28 21:29:43
为什么要这样做?(请描述您的用例)
Viewhelpers用于FLUID模板中,在那里你有正确和匹配的上下文。
如果你想在typoscript中直接调用PHP函数,你可以选择userfunc (manual)。但您需要提供必要的上下文。
https://stackoverflow.com/questions/62064542
复制相似问题