Feature: #102834 - Auto-registration of New Content Element Wizard via TCA
See forge#102834
Description
Content element types defined in TCA field
CType
are now automatically
registered for the New Content Element Wizard. This replaces the former extra
step to define a wizard entry in page TSconfig
mod.
.
The item entries
value
,
label
,
description
,
group
and
icon
are used to define the wizard entry.
The migration looks as follows:
Before:
# Add a new element (header) to the "common" group
mod.wizards.newContentElement.wizardItems.common.elements.header {
iconIdentifier = content-header
title = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:common_headerOnly_title
description = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:common_headerOnly_description
tt_content_defValues {
CType = header
}
}
mod.wizards.newContentElement.wizardItems.common.show := addToList(header)
After:
// use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
ExtensionManagementUtility::addPlugin(
[
'label' => 'LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:common_headerOnly_title',
'description' => 'LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:common_headerOnly_description',
'group' => 'default',
'value' => 'header',
'icon' => 'content-header',
],
'CType',
'my_extension',
);
And for an Extbase plugin:
// use TYPO3\CMS\Extbase\Utility\ExtensionUtility;
ExtensionUtility::registerPlugin(
'my_extension', // extension name
'my_plugin', // plugin name
'My plugin title', // plugin title
'my-icon', // icon identifier
'default', // group
'My plugin description' // plugin description
);
Note
Probably it will only be necessary to migrate the
description
,
as the other values are already set most of the time. This can be done
for plugins as well, using the
$plugin
argument of
the
Extension
method.
Additionally, the group
common
is now called
default
.
This will be migrated automatically for page TSconfig.
The
save
option is now defined through TCA as well:
Before:
mod.wizards.newContentElement.wizardItems {
special.elements {
div {
saveAndClose = 1
}
}
}
After:
<?php
$GLOBALS['TCA']['tt_content'] = array_merge_recursive(
$GLOBALS['TCA']['tt_content'],
[
'types' => [
'div' => [
'creationOptions' => [
'saveAndClose' => true,
],
],
],
]
);
The same applies to the default values. The option has been renamed from
tt_
to default
:
Before:
mod.wizards.newContentElement.wizardItems {
special.elements {
html {
tt_content_defValues {
bodytext = some text
}
}
}
}
After:
<?php
$GLOBALS['TCA']['tt_content'] = array_merge_recursive(
$GLOBALS['TCA']['tt_content'],
[
'types' => [
'html' => [
'creationOptions' => [
'defaultValues' => [
'bodytext' => 'some text'
],
],
],
],
]
);
Removing items from the select box still works as before through page
TSconfig
TCEFORM
. This will remove both the TCA items entry
and the wizard entry.
TCEFORM.tt_content.CType {
removeItems := addToList(header)
}
To hide groups or elements in the wizard a new option
remove
is available.
# Before
mod.wizards.newContentElement.wizardItems.special.show := removeFromList(html)
# After
mod.wizards.newContentElement.wizardItems.special.removeItems := addToList(html)
As mentioned, it's also possible to remove a whole group:
# This will remove the "menu" group
mod.wizards.newContentElement.wizardItems.removeItems := addToList(menu)
Impact
The groups and elements of the new Content Element Wizard are now registered automatically from the TCA type field. This eases the creation of new content elements and plugins for integrators and developers, since the whole definition is done at a central place.