【发布时间】:2017-01-24 15:15:37
【问题描述】:
我在 Textmedia 内容元素中添加了一个 Flexform。这很好用。如何在视图中获取表单数据?内容元素没有控制器,{settings} 变量不包含 Flexform 数据。
我很高兴得到每一个帮助。
干杯
【问题讨论】:
标签: typo3 extbase typo3-7.6.x
我在 Textmedia 内容元素中添加了一个 Flexform。这很好用。如何在视图中获取表单数据?内容元素没有控制器,{settings} 变量不包含 Flexform 数据。
我很高兴得到每一个帮助。
干杯
【问题讨论】:
标签: typo3 extbase typo3-7.6.x
您可以使用 TYPO3 Core API 简单地将 Flexform XML 字符串转换为数组:
$ffContent = \TYPO3\CMS\Core\Utility\GeneralUtility::xml2array($xmlString);
这只会将 XML 标记结构转换为数组,这会留下一个非常复杂的数组进行迭代。
为了获得一个简化的结构,而不会因为工作表、本地化等而产生 Flexform“膨胀”,Extbase 提供了自己的 FlexformService:
$flexformService = GeneralUtility::makeInstance('TYPO3\CMS\Extbase\Service\FlexFormService');
$ffContent = $flexformService->convertFlexFormContentToArray($xmlString);
如果您需要本地化内容,则需要为$languagePointer(第二个参数)或$valuePointer(第三个参数)传递一个调整后的值。
编辑:正如您所写,您手头没有控制器可以将上面的代码放入其中,您可能需要为此创建一个视图助手。视图助手可以将操作的结果分配为您可以访问的单独变量
{namespace me=MyVendor\MyExtension\ViewHelpers}
…
<me:decodeFlexform value="{object.pi_flexform}" as="ffValues">
{ffValues.myField}
</me:decodeFlexform>
可能已经有各种视图助手集合扩展(vhs 和朋友)之一。
【讨论】:
对于内容元素,使用 dataProcessor 可能很容易。我现在在移动设备上,明天早上将为 flexform dataProcessor 添加代码。
【讨论】: