【问题标题】:TYPO3 - Pass a variable from Fluid to a cObjectTYPO3 - 将变量从流体传递到 cObject
【发布时间】:2017-02-19 20:08:13
【问题描述】:

我正在使用流体内容,我想在内容元素中呈现一个插件。因此,我创建了以下 COA:

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

此对象正在使用 cOject 视图助手在流体模板中呈现。

<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}" />

【问题讨论】:

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


    【解决方案1】:

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

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

    使用set 变体,您可以添加变量,然后调用f:cObject,无论您的下一个流体模板在渲染堆栈中有多深,使用get 变体检索值。

    例如,如果您将内容元素与其他嵌套内容元素一起使用,则非常有用,例如检索或重新定义任何嵌套深度的值。

    注意:也可以在 TypoScript 以及通过 TYPO3 执行的自定义 PHP 中访问,使用 https://docs.typo3.org/typo3cms/TyposcriptReference/ContentObjects/LoadRegister/Index.html。所以总的来说,它可能比严格传递参数要简单得多,而且绝对更灵活。

    【讨论】:

      【解决方案2】:

      您可以使用流体模板中的一些帮助(也许):

      <f:debug>{_all}</f:debug>
      

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

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

      【讨论】:

        【解决方案3】:

        如果您将字符串定义为数据,请使用 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 数据。

        【讨论】:

        • 感谢您的帮助。我尝试了这两个版本,但我无法将变量传递给表单的流体模板。
        • extname_form 扩展中可能有一些东西取决于如何访问变量。对于带有“变量”的示例,仅当 tt_content.list.20.extname_form 是 FLUID_TEMPLATE 对象时才有效。在不知道扩展名的情况下,您必须解析控制器中的设置并将它们分配给您的视图。
        • 我无法让它工作。同样在表单控制器中,我无法访问变量。表单插件也是用流体模板实现的。如果我使用第一个版本,我会在模板中看到变量。问题是没有取变量内容。
        • 我已经用一个示例编辑了我的答案,以便在设置中使用stdWrap
        • 很抱歉,它不起作用。我没有得到变量的内容。我这样称呼打字稿对象: 对吗?
        猜你喜欢
        • 2017-07-14
        • 2015-01-26
        • 2021-09-01
        • 1970-01-01
        • 2016-03-25
        • 2021-05-30
        • 1970-01-01
        • 1970-01-01
        • 2021-11-18
        相关资源
        最近更新 更多