Important: #98960 - Default type definition of custom Content Types
See forge#98960
Description
Due to the deprecation of Switchable Controller Actions for Extbase, it is
recommended to use custom content types as plugins. When using Extbase's API
\TYPO3\
with
the 5th argument being set to
\TYPO3\
or TYPO3's native API \TYPO3\
with the second argument being set to CType
, the entered icon identifier
is now automatically added as typeicon_
for the given CType
and
the TCA
types definition (showitem
) of the default header
type is
automatically applied, so extension authors do not need to add all default
fields anymore.
Note
These defaults are only applied if they are not set manually, so the changes are optional defaults.
In addition, the API method \TYPO3\
now also allows to add custom fields after a palette, so common variants such
as the Plugin
tab can be added after a specific palette.
Example
Example for a custom Extbase plugin with TYPO3's Core "felogin" extension
in EXT:
:
call_user_func(static function () {
$contentTypeName = 'felogin_login';
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
'Felogin',
'Login',
'LLL:EXT:felogin/Resources/Private/Language/Database.xlf:tt_content.CType.felogin_login.title',
'mimetypes-x-content-login',
'forms'
);
// Add the FlexForm for the new content type
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue(
'*',
'FILE:EXT:felogin/Configuration/FlexForms/Login.xml',
$contentTypeName
);
// Add the FlexForm to the showitem list
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes(
'tt_content',
'--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.plugin, pi_flexform',
$contentTypeName,
'after:palette:headers'
);
});
It is configured to be a content element with its own ctype by having the 5th
parameter set to Extension
.
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
ExtensionUtility::configurePlugin(
'Felogin',
'Login',
[
LoginController::class => 'login, overview',
PasswordRecoveryController::class => 'recovery,showChangePassword,changePassword',
],
[
LoginController::class => 'login, overview',
PasswordRecoveryController::class => 'recovery,showChangePassword,changePassword',
],
ExtensionUtility::PLUGIN_TYPE_CONTENT_ELEMENT
);