TYPO3:TCA转FlexForm语法及视图专属配置实现
解决TYPO3 FlexForm中针对不同视图配置专属设置的问题
刚好我熟悉TYPO3 FlexForm的配置逻辑,针对你想要给不同视图设置专属配置项的需求——比如仅在列表视图显示“单视图页面”设置,其他视图隐藏——其实用FlexForm的displayCond属性就能轻松实现。结合你给出的现有switchableControllerActions配置,具体实现方式如下:
首先,先回顾你现有的控制器动作选择器配置:
<el> <switchableControllerActions> <TCEforms> <label>Select function</label> <onChange>reload</onChange> <config> <type>select</type> <items> <numIndex index="0"> <numIndex index="0">List View</numIndex> <numIndex index="1">MyExt->list;MyExt->show</numIndex> </numIndex> <numIndex index="1"> <numIndex index="0">Detail View</numIndex> <numIndex index="1">MyExt->show</numIndex> </numIndex> <numIndex index="5"> <numIndex index="0">Import</numIndex> <numIndex index="1">--div--</numIndex> </numIndex> <numIndex index="10"> <numIndex index="0">User Import</numIndex> <numIndex index="1">MyExt->import</numIndex> </numIndex> </items> <types> <numIndex index="0"> <showItem index="0">orderBy</showItem> <showItem index="1">orderBy</showItem> </numIndex> </types> </config> </TCEforms> </switchableControllerActions> </el>
实现专属配置的核心方案
要让特定配置项仅在指定视图下显示,关键是给目标配置项添加displayCond属性,通过匹配switchableControllerActions的选中值来控制显示逻辑。
比如你已经找到的“单视图页面”配置,就完美应用了这个逻辑:
<pidSingle> <TCEforms> <label>Page for the single views</label> <!-- 仅当选中"List View"对应的控制器动作时,才显示该字段 --> <displayCond>FIELD:switchableControllerActions:=:MyExt->list;MyExt->show</displayCond> <config> <type>input</type> <eval>trim</eval> </config> </TCEforms> </pidSingle>
关键逻辑解释
displayCond的语法为FIELD:字段名:=:目标值,这里的字段名就是你定义的switchableControllerActions,目标值必须和你在items里配置的控制器动作字符串完全一致(比如列表视图对应的MyExt->list;MyExt->show)。- 当后台用户选择“List View”时,
pidSingle字段会自动显示;切换到“Detail View”或“User Import”等其他选项时,该字段会自动隐藏,精准实现了专属配置的需求。
扩展:多视图显示的情况
如果需要某个配置项在多个视图下都显示,可以使用OR逻辑来组合条件,示例如下:
<displayCond>OR:FIELD:switchableControllerActions:=:MyExt->list;MyExt->show,FIELD:switchableControllerActions:=:MyExt->show</displayCond>
内容的提问来源于stack exchange,提问作者Aristeidis Karavas
相关产品推荐
相关产品推荐

