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