Лучший способ зарегистрировать пользовательский элемент контента в Type-Dropdown - PullRequest
0 голосов
/ 20 февраля 2019

Каков наилучший способ добавить элемент содержимого в раскрывающийся список «Тип»?

В документации рекомендуется только функция \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

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

1 Ответ

0 голосов
/ 21 февраля 2019

Существует различие между типами элементов контента и плагинами в TYPO3.

Зарегистрированные плагины не будут показаны / доступны отдельно в селекторе типов элементов контента.Каждый зарегистрированный плагин доступен только как часть выбора типа элемента контента plugin (list).

Я полагаю, вы хотите добавить свой собственный новый элемент контента, а не элемент плагина типа.Тогда вы можете взглянуть на EXT: bootstrap_package от Бенджамина Котта, который содержит лучшие практики для такого варианта использования.

Например, приведенная ниже конфигурация TYPO3 TCA для TYPO3 8.7 и 9.5

  • добавляетпользовательский элемент содержимого 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)
...