在TYPO3自定义扩展中用Flexform添加含子字段的重复Images字段
TYPO3 Flexform 实现可重复「Images」字段组
以下是整合现有topimage和bottomimage字段,实现可重复图片组的完整Flexform配置方案:
Flexform 代码示例
<T3DataStructure> <sheets> <sDEF> <ROOT> <TCEforms> <sheetTitle>Images Settings</sheetTitle> </TCEforms> <type>array</type> <el> <!-- 可重复的Images字段组 --> <images> <TCEforms> <label>Images</label> <config> <type>section</type> <renderType>flexSection</renderType> <items> <numIndex index="0"> <numIndex index="0">Images Item</numIndex> <numIndex index="1"> <type>array</type> <el> <!-- Top Image 子字段 --> <topimage> <TCEforms> <label>Top Image</label> <config> <type>group</type> <internal_type>file</internal_type> <allowed>gif,jpg,jpeg,png,svg</allowed> <maxitems>1</maxitems> <minitems>0</minitems> <show_thumbs>1</show_thumbs> <size>1</size> <uploadfolder>uploads/tx_yourextkey</uploadfolder> <eval>trim</eval> </config> </TCEforms> </topimage> <!-- Bottom Image 子字段 --> <bottomimage> <TCEforms> <label>Bottom Image</label> <config> <type>group</type> <internal_type>file</internal_type> <allowed>gif,jpg,jpeg,png,svg</allowed> <maxitems>1</maxitems> <minitems>0</minitems> <show_thumbs>1</show_thumbs> <size>1</size> <uploadfolder>uploads/tx_yourextkey</uploadfolder> <eval>trim</eval> </config> </TCEforms> </bottomimage> </el> </numIndex> </numIndex> </items> <!-- 设置可重复次数,999表示允许无限添加 --> <elastic>999</elastic> <maxitems>999</maxitems> <minitems>0</minitems> </config> </TCEforms> </images> </el> </ROOT> </sDEF> </sheets> </T3DataStructure>
关键配置说明
<section>+<renderType>flexSection</renderType>:定义可重复字段区块,后台会自动生成「添加」按钮支持多次新增项- 子字段容器:通过
<items>里的数组结构,把topimage和bottomimage封装为单个可重复单元 - 图片字段配置:沿用原有
group类型的文件上传规则,确保allowed、uploadfolder等参数和你原有字段匹配 - 重复次数控制:
elastic和maxitems设为999支持无限添加,可按需调整数值限制数量
模板渲染示例(Fluid)
在扩展的Fluid模板中,通过循环遍历可重复字段:
<f:if condition="{data.flexform_images}"> <f:for each="{data.flexform_images}" as="imageItem"> <div class="image-item"> <f:if condition="{imageItem.topimage}"> <f:image src="uploads/tx_yourextkey/{imageItem.topimage.0}" alt="Top Image" /> </f:if> <f:if condition="{imageItem.bottomimage}"> <f:image src="uploads/tx_yourextkey/{imageItem.bottomimage.0}" alt="Bottom Image" /> </f:if> </div> </f:for> </f:if>
注意事项
- 替换配置中的
tx_yourextkey为你的实际扩展键名 - 在TCA配置中关联该Flexform文件:
'config' => [ 'type' => 'flex', 'ds' => [ 'default' => 'EXT:yourextkey/Configuration/FlexForms/ImagesFlexform.xml', ], ], - 原有字段数据需手动迁移至新的可重复结构,或保留原字段做兼容处理
内容的提问来源于stack exchange,提问作者Amrutha Lakshmi
相关产品推荐
相关产品推荐

