TYPO3扩展TCA对Flux类型内容元素无效的问题求助
问题:Flux类型内容元素无法继承tt_content的frame_class扩展配置
我在扩展TYPO3的tt_content表TCA字段frame_class时遇到了问题:为下拉列表新增了"Custom Section Class"和"Custom Class"两个选项,且通过displayCond实现了选择对应选项时显示自定义输入框的逻辑。这套配置对普通Ctype内容元素完全生效,但对Flux类型的内容元素毫无作用。
已执行的操作步骤
- 在
extensions\site\Configuration\TCA\Overrides路径下创建tt_content.php文件 - 写入TCA扩展配置代码
- 在
ext_table.sql中添加custom_class和custom_section字段 - 执行数据库结构更新并清除系统缓存
现有配置代码
TCA配置文件(tt_content.php)
// debug($GLOBALS['TCA']['tt_content']['types']);die(); $GLOBALS['TCA']['tt_content']['columns']['frame_class'] = [ 'exclude' => true, 'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:frame_class', 'onChange'=>'reload', 'config' => [ 'type' => 'select', 'renderType' => 'selectSingle', 'items' => [ ['label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:frame_class.default', 'value' => 'default'], ['label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:frame_class.ruler_before', 'value' => 'ruler-before'], ['label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:frame_class.ruler_after', 'value' => 'ruler-after'], ['label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:frame_class.indent', 'value' => 'indent'], ['label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:frame_class.indent_left', 'value' => 'indent-left'], ['label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:frame_class.indent_right', 'value' => 'indent-right'], ['label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:frame_class.none', 'value' => 'none'], ['label'=>'Custom Section Class','value'=>'Section'], ['label'=>'Custom Class','value'=>'Class'] ], 'default' => 'default', ], ]; // Add the new field custom_section to tt_content \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('tt_content', [ 'custom_section' => [ 'exclude' => true, 'label' => 'Custom Section Class Name', 'description' => 'Section class name', 'config' => [ 'type' => 'input', 'size' => 30, 'eval' => 'trim', 'behaviour' => [ 'allowLanguageSynchronization' => true, ], ], 'displayCond' => 'FIELD:frame_class:=:Section', // Show only if frame_class is 'Section' ], ]); \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes('tt_content', 'custom_section', '', 'after:frame_class'); // Add the new field custom_class to tt_content \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('tt_content', [ 'custom_class' => [ 'exclude' => true, 'label' => 'Class Name', 'description' => 'class name', 'config' => [ 'type' => 'input', 'size' => 30, 'eval' => 'trim', 'behaviour' => [ 'allowLanguageSynchronization' => true, ], ], 'displayCond' => 'FIELD:frame_class:=:Class', // Show only if frame_class is 'Class' ], ]); // Add the new field to the palettes and show items \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes('tt_content', 'custom_class', '', 'after:frame_class');
数据库表结构代码(ext_table.sql)
CREATE TABLE tt_content ( custom_class varchar(255) DEFAULT '' NOT NULL, custom_section varchar(255) DEFAULT '' NOT NULL );
解决方案
Flux类型内容元素会覆盖tt_content的默认TCA配置,尤其是types下的字段展示定义,需针对性调整配置:
1. 改为追加frame_class选项,避免覆盖原有配置
不要直接替换整个frame_class字段配置,而是在原有选项后追加自定义选项:
// 追加自定义选项到frame_class下拉列表 $GLOBALS['TCA']['tt_content']['columns']['frame_class']['config']['items'][] = ['label'=>'Custom Section Class','value'=>'Section']; $GLOBALS['TCA']['tt_content']['columns']['frame_class']['config']['items'][] = ['label'=>'Custom Class','value'=>'Class']; // 添加上onChange触发页面重载(如果原有配置未包含) $GLOBALS['TCA']['tt_content']['columns']['frame_class']['onChange'] = 'reload';
2. 针对Flux类型Ctype显式添加字段
Flux内容元素的Ctype通常以flux_开头(或自定义前缀),需遍历匹配并添加字段到其展示列表:
// 遍历所有Flux相关的Ctype,添加字段配置 foreach ($GLOBALS['TCA']['tt_content']['types'] as $ctype => $config) { if (str_starts_with($ctype, 'flux_')) { \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes( 'tt_content', 'frame_class,--linebreak--,custom_section,custom_class', $ctype, 'after:header' // 可根据需求调整字段位置 ); } }
3. 验证Flux模板兼容性
如果Flux模板中自定义了frame_class的渲染逻辑,需确保模板能读取到新增选项值,以及custom_class、custom_section字段的存储值。
内容的提问来源于stack exchange,提问作者oussema harrabi
相关产品推荐
相关产品推荐

