如何在TYPO3中检查表/字段是否为富文本字段?
在 BE 或 CLI 上下文中,我想获取提供 RTE 字段的所有表/字段。
此外,获取支持类型链接的所有字段(例如
t3://page?uid?123
语法)。
用例例如:
这是一个初步的自我回答 - 我正在使用以下方法,但可能有些事情我还没有考虑到。
所有这些都需要考虑:
选中启用Richtext
一个简单的检查是检查 TCA 中的 enableRichtext 字段,例如
$GLOBALS['TCA'][$table]['columns'][$field]['config']['enableRichtext']
。
但是,这不会得到所有结果,最值得注意的是
tt_content.bodytext
(未设置此选项的情况)!
还考虑types的columnsOverrides(如果已定义)
对于该字段,结果并不总是相同,取决于
CType
字段。它由 $GLOBALS['TCA']['tt_content']['ctrl']['type']
中的 type定义,CType 将用作 tt_content 的类型字段。
然后在
$GLOBALS['TCA'][$table]['types']
中找到基于类型的附加配置,其中包含“textmedia”类型的表/字段tt_content.bodytext
的以下内容:
$GLOBALS['TCA'][$table]['types']
:
'textmedia' => [
'columnsOverrides' => [
'bodytext' => [
'config' => [
'enableRichtext' => 1,
]
]
]
];
因此,检查富文本必须始终包含为表定义的类型。例如,如果配置不同,请参阅 tt_content (`$GLOBALS['TCA'][$table]['types']['html']['columnsOverrides']['bodytext'][ 中的 html 元素‘配置’]:
[
'format' => 'html',
'renderType' => 't3editor',
]
另请检查软参考
此外,如果检查该字段是否支持打字链接,可以检查“softref”字段
$GLOBALS['TCA'][$table]['columns'][$field]['config']['softref']
。如果包含 typolink_tag
,则应支持打字链接。它可能看起来像这样:
typolink_tag,email[subst],url
这也可能被特定类型覆盖,如 2 中所述。
您可能还想检查 BE 是否配置了 RTE(如果相关),例如与
$backendUser->isRTE();
另一种可能更好的解决方案是使用 FormEngine 来处理。例如,如果直接在 TCA 中检查 TCA 配置
richtextConfiguration
,则不考虑页面 TSconfig 的覆盖。如果您使用 FormEngine 机制(例如进行 TCA 预处理),则可以像 TYPO3 在后端使用它一样应用所有内容。然而,这使用起来不太简单,并且有它自己的陷阱(例如,从 TYPO3 v13 开始需要一个请求对象)。
已测试 TYPO3 v11。
TYPO3\CMS\RteCKEditor\Form\Resolver\RichTextNodeResolver