3

将内容元素添加到“类型”下拉列表的最佳方法是什么?

文档中仅推荐使用该功能\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-element 之后使用 Position

\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'
);
4

1 回答 1

1

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

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

我猜您希望添加自己的新内容元素,而不是插件类型的元素。然后,您可以查看 Benjamin Kott 的 EXT:bootstrap_package,其中包含此类用例的最佳实践。

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

  • 添加自定义内容元素newcontentelement
  • 分配一个content-yourextensionkey-newcontentelement必须注册的图标标识符ext_localconf.php
  • 并为后端的编辑器配置字段 ( showitem)

EXT:your_extension_key/Configuration/TCA/Overrides/tt_content.php

// 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,
';

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

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

EXT:your_extension_key/ext_localconf.php

// 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']
);

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

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)
于 2019-02-21T00:22:28.897 回答