TYPO3 - 如何将变量从Fluid传递到cObject

3

我正在使用 fluidcontent,并且希望在内容元素中呈现一个插件。因此,我创建了以下 COA:

form = COA
form {
     15 < tt_content.list.20.extname_form
     15.settings.id = |
}

这个对象将使用cObject视图助手在流体模板中呈现。
<f:cObject typoscriptObjectPath="form" data="testId" />

渲染过程正常。

问题在于我无法访问COA对象中的数据变量。在表单模板中,变量settings.id的内容是|而不是testId

我尝试使用vhs视图助手request.render来渲染插件,但也无法传递变量。

<v:render.request action="request" controller="Form" extensionName="ExtName" pluginName="Form" vendorName="VendorName" arguments="{_all}" />
3个回答

4

还有一种方法是使用全局变量注册表。TYPO3包含一个所谓的“LOAD REGISTER”,即变量的静态存储。VHS扩展包含与该存储交互的ViewHelpers:

https://fluidtypo3.org/viewhelpers/vhs/master/Variable/Register/GetViewHelper.html

使用set变种,您可以添加您的变量,然后调用f:cObject,无论您的下一个Fluid模板嵌套多深,使用get变种都可以检索该值。非常有用,例如您使用其他嵌套内容元素的内容元素,例如检索或重新定义任何嵌套深度的值。
注意:也可以通过https://docs.typo3.org/typo3cms/TyposcriptReference/ContentObjects/LoadRegister/Index.html在TypoScript中访问以及通过TYPO3执行的自定义PHP。因此,总体而言,它可能比严格传递参数要简单得多,肯定更加灵活。

1

在您的流体模板中,您可以使用以下内容:

可能会有所帮助。
<f:debug>{_all}</f:debug>

这样你就可以检查到大量可用信息,否则在你的控制器中:

\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($yourVariable);

0
如果您将字符串定义为数据,请使用stdWrap的.current = 1选项:
form = COA
form {
     15 < tt_content.list.20.extname_form
     15.settings.id.current = 1
}

但是你的“extname_form”应该在设置上使用stdWrap,否则你应该使用“variables”:

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


谢谢您的帮助。我尝试了两个版本,但我无法将变量传递到表单的流体模板中。 - Michael Mauracher
您的 extname_form 扩展中可能有一些内容依赖于如何访问变量。对于仅涉及“变量”的示例,仅当tt_content.list.20.extname_form 是一个 FLUID_TEMPLATE 对象时才有效。如果不知道扩展名,则必须在控制器中解析设置并将其分配给视图。 - René Pflamm
我无法让它工作。在表单控制器中,我也无法访问变量。表单插件也是使用fluidtemplate实现的。如果我使用第一个版本,我可以在模板中看到变量。问题在于变量内容没有被采用。 - Michael Mauracher
我已经编辑了我的答案,并提供了一个关于如何在设置中使用stdWrap的示例。 - René Pflamm
抱歉,但它不起作用。我无法获取变量的内容。 我像这样调用typoscript对象: <f:cObject typoscriptObjectPath="form" data="{settings.id}" /> 这正确吗? - Michael Mauracher
那我必须放弃了。我已经没有更多的想法,而且不幸的是没有足够的时间来重建你的环境以尝试 :( - René Pflamm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接