Configuration 将自定义内容元素注册到类型下拉列表的最佳方法

Configuration 将自定义内容元素注册到类型下拉列表的最佳方法,configuration,typo3,Configuration,Typo3,向“类型”下拉列表中添加内容元素的最佳方式是什么 在中,仅建议使用函数\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPlugin 使用此函数,我无法确定项目在“类型”下拉列表中的位置 但是通过函数addTcaSelectItem我可以确定元素的位置 我忽略了什么吗?为什么建议使用addPlugin,而不是addTcaSelectItem 示例配置/TCA/Overrides/tt_content.php \TYPO3\CMS\Cor

向“类型”下拉列表中添加内容元素的最佳方式是什么

在中,仅建议使用函数
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPlugin

使用此函数,我无法确定项目在“类型”下拉列表中的位置

但是通过函数
addTcaSelectItem
我可以确定元素的位置

我忽略了什么吗?为什么建议使用
addPlugin
,而不是
addTcaSelectItem

示例配置/TCA/Overrides/tt_content.php

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPlugin(
   array(
      'LLL:EXT:your_extension_key/Resources/Private/Language/Tca.xlf:yourextensionkey_newcontentelement',
      'yourextensionkey_newcontentelement',
      'EXT:your_extension_key/Resources/Public/Icons/ContentElements/yourextensionkey_newcontentelement.svg'
   ),
   'CType',
   'your_extension_key'
);
在textmedia元素后加上位置

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTcaSelectItem(
    'tt_content',
    'CType',
    [
        'LLL:EXT:your_extension_key/Resources/Private/Language/Tca.xlf:yourextensionkey_newcontentelement',
        'yourextensionkey_newcontentelement',
        'EXT:your_extension_key/Resources/Public/Icons/ContentElements/yourextensionkey_newcontentelement.svg'
    ],
    'textmedia',
    'after'
);

TYPO3中的内容元素类型和插件之间存在差异

注册的插件不会在内容元素类型选择器中单独显示/可用。每个已注册的插件只能作为内容元素类型的子选择
插件
列表

我猜您希望添加自己的新内容元素,而不是plugin类型的元素。然后您可以看看Benjamin Kott的EXT:bootstrap_包,它包含了这种用例的最佳实践

例如,下面针对TYPO3 8.7和9.5的TYPO3 TCA配置

  • 添加自定义内容元素
    newcontentelement
  • 分配图标标识符
    content yourextensionkey newcontentelement
    ,该标识符必须在
    ext\u localconf.php
  • 并配置后端编辑器的字段(
    showitem
EXT:your_extension_key/Configuration/TCA/Overrides/tt_content.php

您需要根据需要采用
showitem
数组,以便在后端为编辑器启用内容元素字段

在名为fx
mimetypes-x-content-newcontentelement.svg的
EXT:your_extension\u key/Resources/Public/Icons下添加自定义内容元素图标

EXT:your_extension_key/EXT_localconf.php

您可能希望在向导中提供新的内容元素以创建新的内容元素。 将下面的配置添加到页面配置(
pageTSConfig
):


非常感谢您的回答,但我知道如何创建自定义CE。带着我的问题,我想知道为什么在文档功能addPlugin中建议将新的elment注册到类型下拉列表中,而不是可以确定顺序的功能AddTcselectItem。只要改进文档,addPlugin就可以将项目添加到由第二个参数确定的字段中,它默认为“列表类型”-但它仍然可以对包含类似于“列表类型”的项目的任何其他字段执行相同的操作。因此,尽管文档是正确的,但该方法的名称具有误导性。
// Add 'newcontentelement' to tt_content.CType selector list
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTcaSelectItem(
    'tt_content',
    'CType',
    [
        'New content element', # Use localization 'LLL:EXT:your_extension_key/Resources/Private/Language/Backend.xlf:content_element.newcontentelement',
        'newcontentelement',
        'content-yourextensionkey-newcontentelement'
    ],
    '--div--',
    'after'
);
// Assign Icon for tt_content.CType 'newcontentelement'
$GLOBALS['TCA']['tt_content']['ctrl']['typeicon_classes']['newcontentelement'] = 'content-yourextensionkey-newcontentelement';
// Configure content element type 'newcontentelement'
$GLOBALS['TCA']['tt_content']['types']['newcontentelement']['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.headers;headers,
    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
        --palette--;;language,
    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
        --palette--;;hidden,
        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
        categories,
    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
        rowDescription,
    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
';
// Register Icons
$iconRegistry = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Imaging\IconRegistry::class);
$iconRegistry->registerIcon(
    'content-yourextensionkey-newcontentelement',
    \TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider::class,
    ['source' => 'EXT:your_extension_key/Resources/Public/Icons/mimetypes-x-content-newcontentelement.svg']
);
mod.wizards {
    newContentElement {
        wizardItems {
            special {
                elements {
                    newcontentelement {
                        icon = EXT:your_extension_key/Resources/Public/Icons/mimetypes-x-content-newcontentelement.svg
                        title = LLL:EXT:your_extension_key/Resources/Private/Language/Backend.xlf:content_element.newcontentelement
                        description = LLL:EXT:your_extension_key/Resources/Private/Language/Backend.xlf:content_element.newcontentelement.description
                        tt_content_defValues {
                            CType = newcontentelement
                        }
                    }
                }
                show = *
            }
        }
    }
}
mod.wizards.newContentElement.wizardItems.special.show := addToList(newcontentelement)