TYPO3 - 将变量从Fluid传递给cObject

时间:2016-10-11 09:49:35

标签: typo3 typoscript fluid extbase typo3-7.6.x

我正在使用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}" />

3 个答案:

答案 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数据。