TYPO3自定义内容元素新增字段在所有编辑页显示如何处理
TYPO3 10.4自定义内容元素专属字段显示解决方案
问题根源
你之前通过addFieldsToPalette将自定义字段添加到了全局通用的general面板中,所有内容元素的TCA配置默认都会继承这个全局palette的字段,所以字段会在所有内容元素的编辑页展示。
修复步骤
步骤1:保留自定义字段注册代码
你之前用addTCAcolumns注册4个自定义字段的代码无需修改,示例如下:
<?php defined('TYPO3') or die(); // 注册tt_content自定义字段 \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('tt_content', [ 'tx_pagesaddfields_frontsideheader' => [ 'label' => '正面标题', 'config' => [ 'type' => 'input', 'size' => 50, 'eval' => 'trim' ] ], 'tx_pagesaddfields_frontsidebodytext' => [ 'label' => '正面正文', 'config' => [ 'type' => 'text', 'enableRichtext' => true ] ], 'tx_pagesaddfields_backsideheader' => [ 'label' => '背面标题', 'config' => [ 'type' => 'input', 'size' => 50, 'eval' => 'trim' ] ], 'tx_pagesaddfields_backsidebodytext' => [ 'label' => '背面正文', 'config' => [ 'type' => 'text', 'enableRichtext' => true ] ] ]);
步骤2:删除全局palette添加代码
删掉你之前写的、将4个字段添加到全局general面板的addFieldsToPalette相关代码。
步骤3:为翻盒自定义内容元素单独配置字段显示
首先确认你注册翻盒内容元素时定义的CType标识,假设你的CType为flipbox,替换成你实际的标识后添加以下代码:
// 方式1:直接将字段添加到翻盒内容元素的通用标签页 $GLOBALS['TCA']['tt_content']['types']['flipbox']['showitem'] = str_replace( '--palette--;;general,', '--palette--;;general, tx_pagesaddfields_frontsideheader, tx_pagesaddfields_frontsidebodytext, tx_pagesaddfields_backsideheader, tx_pagesaddfields_backsidebodytext,', $GLOBALS['TCA']['tt_content']['types']['flipbox']['showitem'] ?? '' );
如果希望自定义字段收纳到单独的分组中,可以先创建专属palette再引入:
// 方式2:创建翻盒专属的palette(不会影响其他内容元素) \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPalette( 'tt_content', 'flipbox_specific_fields', '翻盒专属配置', ' tx_pagesaddfields_frontsideheader,tx_pagesaddfields_backsideheader, --linebreak--, tx_pagesaddfields_frontsidebodytext,tx_pagesaddfields_backsidebodytext ' ); // 将专属palette插入到翻盒内容元素的显示配置中 $GLOBALS['TCA']['tt_content']['types']['flipbox']['showitem'] = str_replace( '--palette--;;general,', '--palette--;;general,--palette--;;flipbox_specific_fields,', $GLOBALS['TCA']['tt_content']['types']['flipbox']['showitem'] ?? '' );
步骤4:生效配置
修改完成后进入TYPO3后台,点击右上角清空全部缓存,或进入维护模块清空系统所有缓存后即可生效。
注意事项
- 代码中的
flipbox必须替换为你注册自定义内容元素时实际使用的CType标识,可在你扩展的tt_content配置文件中搜索$GLOBALS['TCA']['tt_content']['types']查看已注册的CType - 用
str_replace插入字段的方式不会覆盖原有内容元素的其他配置,比直接重写整个showitem更稳妥
内容的提问来源于stack exchange,提问作者Miz15
相关产品推荐
相关产品推荐

