我想用一个字段扩展TYPO3的一些内容元素来输入自定义CSS类。因此,我认为,pi_flexform字段是要去的地方,因为它提供了以后添加更多值的灵活性。(不,我不想为所有CSS类创建布局选项)
在 TCA 覆盖中 - 例如,让我们说"texpic" - 我添加了以下结构:
$GLOBALS['TCA']['tt_content']['types']['textpic'] = array_replace_recursive(
$GLOBALS['TCA']['tt_content']['types']['textpic'], [
'columns' => [
'pi_flexform' => [
'l10n_display' => 'hideDiff',
'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:pi_flexform',
'config' => [
'type' => 'flex',
'ds_pointerField' => 'list_type,CType',
'ds' => [
'default' => '
<T3DataStructure>
<ROOT>
<type>array</type>
<el>
<customClass>
<TCEforms type="array">
<label>My custom CSS classes</label>
<config type="array">
<type>input</type>
<eval>trim</eval>
</config>
</TCEforms>
</customClass>
</el>
</ROOT>
</T3DataStructure>
'
],
'search' => [
'andWhere' => '{#CType}='list''
]
]
]
],
'showitem' => '
--div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
--palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header_minimal,
pi_flexform,
[...]
']
);
pi_flexform字段显示在后端,但不会评估上面的 XML 配置。它显示了Plugin Options [pi_flexform] The Title:
这是文件typo3sysextfrontendConfigurationTCAtt_content.php
中的演示示例值。所以似乎我的代码没有完全被覆盖,只有"showitem"部分有效。这里可能有什么问题?
编辑1:在我发布问题后,我发现了我的错误:列的定义需要直接进入tt_content部分:
$GLOBALS['TCA']['tt_content']['columns']['pi_flexform'] = [...]
不幸的是,这意味着它将对所有tt_content元素产生影响,除了其他插件会再次覆盖它。所以问题仍然存在:有没有一种简单的方法来扩展默认内容元素,而无需编写自己的扩展名或添加数据库字段?
找到一个简单的解决方案!只需将 FlexForm XML 直接添加到addPiFlexFormValue()
,并将内容元素指定为第三个参数:
TYPO3CMSCoreUtilityExtensionManagementUtility::addPiFlexFormValue(
'*',
'<T3DataStructure>
<ROOT>
<type>array</type>
<el>
<customClass>
<TCEforms type="array">
<label>My custom CSS classes</label>
<config type="array">
<type>input</type>
<eval>trim</eval>
</config>
</TCEforms>
</customClass>
</el>
</ROOT>
</T3DataStructure>',
'textpic'
);
它是如此有线:浪费数小时进行尝试,突然在发布问题后,解决方案就会自行出现。