You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TYPO3中检查表/字段是否为富文本字段?

TYPO3:识别RTE字段与支持Typolink的字段方案

一、获取所有RTE字段

仅检查enableRichtext不够,原因如下:

  • 部分字段可能通过richtextConfiguration间接启用RTE(即使未显式设置enableRichtext,继承全局配置也可能生效)
  • 第三方扩展或自定义TCA配置可能通过其他方式开启RTE支持

正确识别逻辑

遍历所有表的TCA配置,对每个字段需同时检查:

  1. 字段config中存在enableRichtext = 1,或richtextConfiguration被设置为有效配置(如default、full)
  2. 字段类型为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语法的字段分为两类:

  1. RTE字段:所有RTE字段默认支持Typolink,由RTE解析器自动处理
  2. 带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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 23:06:22