我正在使用fluidcontent,我想在content元素中渲染一个插件。因此,我创建了以下COA:
form = COA
form {
15 < tt_content.list.20.extname_form
15.settings.id = |
}
此对象将使用cOject viewhelper在流体模板中呈现。
<f:cObject typoscriptObjectPath="form" data="testId" />
渲染过程正常。
问题是我无法访问COA对象内的数据变量。在表单模板中,变量settings.id的内容为|
而不是testId
。
我尝试使用vhs viewhelper request.render渲染插件,但是我也遇到了传递变量的问题。
<v:render.request action="request" controller="Form" extensionName="ExtName" pluginName="Form" vendorName="VendorName" arguments="{_all}" />
答案 0 :(得分:4)
还有另一种方法是使用全局注册表来表示变量。 TYPO3包含一个所谓的&#34; LOAD REGISTER&#34;这意味着变量的静态存储。 VHS扩展包含ViewHelpers以与该存储进行交互:
https://fluidtypo3.org/viewhelpers/vhs/master/Variable/Register/GetViewHelper.html
使用set
变体,您可以添加变量,然后调用f:cObject
,无论您的下一个流体模板位于渲染堆栈内部的深度,使用get
变量检索值
如果您将内容元素与其他嵌套内容元素一起使用,例如非常有用,例如在任何嵌套深度检索或重新定义值。
注意:也可以使用https://docs.typo3.org/typo3cms/TyposcriptReference/ContentObjects/LoadRegister/Index.html在TypoScript中访问以及通过TYPO3执行的自定义PHP。总的来说,处理起来可能要简单得多,而且比严格传递参数更灵活。
答案 1 :(得分:1)
您可以使用的流体模板中的一些帮助(可能):
<f:debug>{_all}</f:debug>
因此您可以查看大量可用信息,否则请在您的控制器中查看:
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($yourVariable);
答案 2 :(得分:0)
如果将String定义为数据,请使用stdWrap的.current = 1
选项:
form = COA
form {
15 < tt_content.list.20.extname_form
15.settings.id.current = 1
}
但是你的“extname_form”应该在设置上使用stdWrap,否则你应该使用“变量”:
form = COA
form {
15 < tt_content.list.20.extname_form
15.variables.id = TEXT
15.variables.id.current = 1
}
使用stdWrap进行设置的示例:
form = COA
form {
15 < tt_content.list.20.extname_form
15.settings.id.current = 1
}
在您的控制器操作中:
/** @var \TYPO3\CMS\Extbase\Service\TypoScriptService $typoScriptService */
$typoScriptService = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Service\TypoScriptService::class);
$typoScriptSettings = $typoScriptService->convertTypoScriptArrayToPlainArray($this->settings);
$this->settings['id'] = $this->configurationManager->getContentObject()->stdWrap($typoScriptSettings['id'], $typoScriptSettings['id.']);
现在你的settings.id由stdWrap解析,应该包含你的cObjectViewHelper数据。