如何在TYPO3中检查表/字段是否为富文本字段?
TYPO3:识别RTE字段与支持Typolink的字段方案
一、获取所有RTE字段
仅检查enableRichtext不够,原因如下:
- 部分字段可能通过
richtextConfiguration间接启用RTE(即使未显式设置enableRichtext,继承全局配置也可能生效) - 第三方扩展或自定义TCA配置可能通过其他方式开启RTE支持
正确识别逻辑
遍历所有表的TCA配置,对每个字段需同时检查:
- 字段
config中存在enableRichtext = 1,或richtextConfiguration被设置为有效配置(如default、full) - 字段类型为
text或textmedium(RTE通常绑定这类字段类型)
示例代码(CLI/BE环境适用)
$rteFields = []; $tables = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Configuration\ExtensionConfiguration::class)->getAllTables(); foreach ($tables as $table) { $tca = \TYPO3\CMS\Core\Configuration\Tca\TcaAccessor::getTca($table); if (empty($tca['columns'])) continue; foreach ($tca['columns'] as $fieldName => $fieldConfig) { $hasRte = false; if (!empty($fieldConfig['config']['enableRichtext'])) { $hasRte = true; } elseif (!empty($fieldConfig['config']['richtextConfiguration'])) { $hasRte = true; } if ($hasRte && in_array($fieldConfig['config']['type'] ?? '', ['text', 'textmedium'])) { $rteFields[] = [ 'table' => $table, 'field' => $fieldName ]; } } }
二、识别支持Typolink的字段
支持t3://page?uid=123这类Typolink语法的字段分为两类:
- RTE字段:所有RTE字段默认支持Typolink,由RTE解析器自动处理
- 带
softref配置的非RTE字段:文本字段只要配置了softref = typolink或包含typolink相关规则,就支持Typolink解析
扩展识别逻辑(基于RTE字段结果)
$typolinkSupportedFields = $rteFields; // RTE字段默认纳入 foreach ($tables as $table) { $tca = \TYPO3\CMS\Core\Configuration\Tca\TcaAccessor::getTca($table); if (empty($tca['columns'])) continue; foreach ($tca['columns'] as $fieldName => $fieldConfig) { // 跳过已识别的RTE字段 $isRteField = in_array($fieldName, array_column($rteFields, 'field')) && $table === array_column($rteFields, 'table')[array_search($fieldName, array_column($rteFields, 'field'))]; if ($isRteField) continue; $softref = $fieldConfig['config']['softref'] ?? ''; if (strpos($softref, 'typolink') !== false || strpos($softref, 'typoscript') !== false) { $typolinkSupportedFields[] = [ 'table' => $table, 'field' => $fieldName, 'type' => 'softref-based' ]; } } }
三、核心结论
仅检查enableRichtext会遗漏两类字段:
- 通过
richtextConfiguration启用RTE的字段 - 非RTE但通过
softref支持Typolink的字段
必须结合richtextConfiguration、字段类型、softref三个维度做完整校验,才能覆盖所有目标字段。
内容的提问来源于stack exchange,提问作者Sybille Peters
相关产品推荐
相关产品推荐

