feat: lineup element on TYPO3 13
Restored from a46918d, TCA ported to TYPO3 13; markup matches TYPO3 10.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
a042eff41d
commit
ad4089ae16
4 files changed
+357
No files matched your search
@@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
|
||||||
|
|
||||||
|
defined('TYPO3') or die();
|
||||||
|
|
||||||
|
call_user_func(function() {
|
||||||
|
$frontendLanguageFilePrefix = 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:';
|
||||||
|
|
||||||
|
ExtensionManagementUtility::addTcaSelectItem(
|
||||||
|
'tt_content',
|
||||||
|
'CType',
|
||||||
|
[
|
||||||
|
'label' => 'Lineup',
|
||||||
|
'value' => 'lineup',
|
||||||
|
'icon' => 'content-image'
|
||||||
|
],
|
||||||
|
'gmap',
|
||||||
|
'after'
|
||||||
|
);
|
||||||
|
|
||||||
|
$GLOBALS['TCA']['tt_content']['columns']['tx_eptheme_lineup'] = [
|
||||||
|
'exclude' => 0,
|
||||||
|
'label' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang_db.xlf:tx_eptheme_domain_model_lineup.items',
|
||||||
|
'config' => [
|
||||||
|
'type' => 'inline',
|
||||||
|
'foreign_table' => 'tx_eptheme_domain_model_lineup',
|
||||||
|
'foreign_field' => 'tt_content',
|
||||||
|
'foreign_sortby' => 'sorting',
|
||||||
|
'maxitems' => 99,
|
||||||
|
'appearance' => [
|
||||||
|
'useSortable' => 1,
|
||||||
|
'collapseAll' => 1,
|
||||||
|
'levelLinksPosition' => 'top',
|
||||||
|
'showSynchronizationLink' => 0,
|
||||||
|
'showPossibleLocalizationRecords' => 0,
|
||||||
|
'showAllLocalizationLink' => 0
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['lineup'] = [
|
||||||
|
'showitem' => '
|
||||||
|
--palette--;' . $frontendLanguageFilePrefix . 'palette.general;general,
|
||||||
|
tx_eptheme_lineup,
|
||||||
|
--div--;' . $frontendLanguageFilePrefix . 'tabs.access,
|
||||||
|
hidden;' . $frontendLanguageFilePrefix . 'field.default.hidden,
|
||||||
|
--div--;' . $frontendLanguageFilePrefix . 'tabs.extended
|
||||||
|
',
|
||||||
|
];
|
||||||
|
|
||||||
|
});
|
||||||
@@ -0,0 +1,210 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use TYPO3\CMS\Core\Resource\FileType;
|
||||||
|
|
||||||
|
return [
|
||||||
|
'ctrl' => [
|
||||||
|
'title' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang_db.xlf:tx_eptheme_domain_model_lineup',
|
||||||
|
'default_sortby' => 'ORDER BY name',
|
||||||
|
'label' => 'name',
|
||||||
|
'tstamp' => 'tstamp',
|
||||||
|
'crdate' => 'crdate',
|
||||||
|
'dividers2tabs' => true,
|
||||||
|
'versioningWS' => true,
|
||||||
|
'hideTable' => true,
|
||||||
|
'languageField' => 'sys_language_uid',
|
||||||
|
'transOrigPointerField' => 'l10n_parent',
|
||||||
|
'transOrigDiffSourceField' => 'l10n_diffsource',
|
||||||
|
'delete' => 'deleted',
|
||||||
|
'enablecolumns' => [
|
||||||
|
'disabled' => 'hidden',
|
||||||
|
'starttime' => 'starttime',
|
||||||
|
'endtime' => 'endtime',
|
||||||
|
],
|
||||||
|
'searchFields' => 'headline,subline',
|
||||||
|
'iconfile' => 'EXT:ep_theme/Resources/Public/images/icon_ce.svg',
|
||||||
|
],
|
||||||
|
'types' => [
|
||||||
|
'1' => [
|
||||||
|
'showitem' => 'hidden, name, description, image, --palette--;;social',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'palettes' => [
|
||||||
|
'social' => ['showitem' => 'facebook_url, twitter_url, youtube_url, instagram_url, soundcloud_url'],
|
||||||
|
],
|
||||||
|
'columns' => [
|
||||||
|
|
||||||
|
'sys_language_uid' => [
|
||||||
|
'exclude' => 0,
|
||||||
|
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language',
|
||||||
|
'config' => ['type' => 'language'],
|
||||||
|
],
|
||||||
|
'l10n_parent' => [
|
||||||
|
'displayCond' => 'FIELD:sys_language_uid:>:0',
|
||||||
|
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent',
|
||||||
|
'config' => [
|
||||||
|
'type' => 'select',
|
||||||
|
'default' => 0,
|
||||||
|
'renderType' => 'selectSingle',
|
||||||
|
'items' => [
|
||||||
|
['label' => '', 'value' => 0],
|
||||||
|
],
|
||||||
|
'foreign_table' => 'tx_eptheme_domain_model_lineup',
|
||||||
|
'foreign_table_where' => 'AND tx_eptheme_domain_model_lineup.pid=###CURRENT_PID### AND tx_eptheme_domain_model_lineup.sys_language_uid IN (-1,0)',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'l10n_diffsource' => [
|
||||||
|
'config' => [
|
||||||
|
'type' => 'passthrough',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
|
||||||
|
't3ver_label' => [
|
||||||
|
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.versionLabel',
|
||||||
|
'config' => [
|
||||||
|
'type' => 'input',
|
||||||
|
'size' => 30,
|
||||||
|
'max' => 255,
|
||||||
|
]
|
||||||
|
],
|
||||||
|
|
||||||
|
'hidden' => [
|
||||||
|
'exclude' => 0,
|
||||||
|
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.hidden',
|
||||||
|
'config' => [
|
||||||
|
'type' => 'check',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'starttime' => [
|
||||||
|
'exclude' => 0,
|
||||||
|
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime',
|
||||||
|
'config' => [
|
||||||
|
'type' => 'datetime',
|
||||||
|
'size' => 13,
|
||||||
|
'checkbox' => 0,
|
||||||
|
'default' => 0,
|
||||||
|
'behaviour' => [
|
||||||
|
'allowLanguageSynchronization' => true,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'endtime' => [
|
||||||
|
'exclude' => 0,
|
||||||
|
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime',
|
||||||
|
'config' => [
|
||||||
|
'type' => 'datetime',
|
||||||
|
'size' => 13,
|
||||||
|
'checkbox' => 0,
|
||||||
|
'default' => 0,
|
||||||
|
'behaviour' => [
|
||||||
|
'allowLanguageSynchronization' => true,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'sorting' => [
|
||||||
|
'config' => [
|
||||||
|
'type' => 'passthrough'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
|
||||||
|
'name' => [
|
||||||
|
'exclude' => 0,
|
||||||
|
'label' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang_db.xlf:tx_eptheme_domain_model_lineup.name',
|
||||||
|
'config' => [
|
||||||
|
'type' => 'input',
|
||||||
|
'size' => 30,
|
||||||
|
'eval' => 'trim,required'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'description' => [
|
||||||
|
'exclude' => 0,
|
||||||
|
'label' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang.xlf:tx_eptheme_domain_model_lineup.description',
|
||||||
|
'config' => [
|
||||||
|
'type' => 'text',
|
||||||
|
'cols' => 40,
|
||||||
|
'rows' => 10,
|
||||||
|
'eval' => 'trim',
|
||||||
|
'enableRichtext' => true,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'image' => [
|
||||||
|
'exclude' => 0,
|
||||||
|
'label' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang_db.xlf:tx_eptheme_domain_model_lineup.image',
|
||||||
|
'config' => [
|
||||||
|
'type' => 'file',
|
||||||
|
'allowed' => 'common-image-types',
|
||||||
|
'appearance' => [
|
||||||
|
'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference',
|
||||||
|
'useSortable' => false,
|
||||||
|
],
|
||||||
|
'overrideChildTca' => [
|
||||||
|
'types' => [
|
||||||
|
FileType::IMAGE->value => [
|
||||||
|
'showitem' => '
|
||||||
|
--palette--;LLL:EXT:core/Resources/Private/Language/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
|
||||||
|
--palette--;;filePalette',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'maxitems' => 1
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'facebook_url' => [
|
||||||
|
'exclude' => 0,
|
||||||
|
'label' => 'Facebook URL',
|
||||||
|
'config' => [
|
||||||
|
'type' => 'input',
|
||||||
|
'size' => 30,
|
||||||
|
'eval' => 'trim'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'twitter_url' => [
|
||||||
|
'exclude' => 0,
|
||||||
|
'label' => 'Twitter URL',
|
||||||
|
'config' => [
|
||||||
|
'type' => 'input',
|
||||||
|
'size' => 30,
|
||||||
|
'eval' => 'trim'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'instagram_url' => [
|
||||||
|
'exclude' => 0,
|
||||||
|
'label' => 'Instagram URL',
|
||||||
|
'config' => [
|
||||||
|
'type' => 'input',
|
||||||
|
'size' => 30,
|
||||||
|
'eval' => 'trim'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'youtube_url' => [
|
||||||
|
'exclude' => 0,
|
||||||
|
'label' => 'YouTube URL',
|
||||||
|
'config' => [
|
||||||
|
'type' => 'input',
|
||||||
|
'size' => 30,
|
||||||
|
'eval' => 'trim'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'soundcloud_url' => [
|
||||||
|
'exclude' => 0,
|
||||||
|
'label' => 'Soundcloud URL',
|
||||||
|
'config' => [
|
||||||
|
'type' => 'input',
|
||||||
|
'size' => 30,
|
||||||
|
'eval' => 'trim'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'tt_content' => [
|
||||||
|
'exclude' => 0,
|
||||||
|
'label' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang_db.xlf:tx_eptheme_domain_model_lineup.tt_content',
|
||||||
|
'config' => [
|
||||||
|
'type' => 'select',
|
||||||
|
'default' => 0,
|
||||||
|
'renderType' => 'selectSingle',
|
||||||
|
'foreign_table' => 'tt_content',
|
||||||
|
'minitems' => 0,
|
||||||
|
'maxitems' => 1,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
tt_content.lineup =< lib.contentElement
|
||||||
|
tt_content.lineup {
|
||||||
|
templateName = Lineup
|
||||||
|
dataProcessing {
|
||||||
|
10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
|
||||||
|
10 {
|
||||||
|
table = tx_eptheme_domain_model_lineup
|
||||||
|
where.data = field:uid
|
||||||
|
where.wrap = tt_content=|
|
||||||
|
orderBy = sorting
|
||||||
|
as = items
|
||||||
|
|
||||||
|
dataProcessing {
|
||||||
|
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
|
||||||
|
10 {
|
||||||
|
references.fieldName = image
|
||||||
|
references.table = tx_eptheme_domain_model_lineup
|
||||||
|
as = image
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
<html data-namespace-typo3-fluid="true" lang="en"
|
||||||
|
xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers"
|
||||||
|
xmlns:ep="http://typo3.org/ns/EP/EpTheme/ViewHelpers">
|
||||||
|
|
||||||
|
<f:layout name="Default" />
|
||||||
|
|
||||||
|
<f:section name="Main">
|
||||||
|
<div class="max-w-screen-xl mx-auto">
|
||||||
|
<f:for each="{items}" as="item" iteration="iteration">
|
||||||
|
<div class="lg:flex odd:flex-row-reverse justify-between items-end mb-16">
|
||||||
|
<div class="mb-4 lg:mb-0 lg:w-1/2">
|
||||||
|
<f:image image="{item.image.0}"
|
||||||
|
loading="lazy"
|
||||||
|
class="block w-full h-auto"
|
||||||
|
width="768"
|
||||||
|
alt="{item.data.name}"/>
|
||||||
|
</div>
|
||||||
|
<div class="lg:w-1/2">
|
||||||
|
<div class="px-4 {f:if(condition: iteration.isEven, then: 'lg:pl-12', else: 'lg:pr-12')}">
|
||||||
|
<span class="headline headline--secondary headline--underlined">
|
||||||
|
{item.data.name -> f:format.raw()}
|
||||||
|
</span>
|
||||||
|
<div data-rte-content>
|
||||||
|
{item.data.description -> f:format.html()}
|
||||||
|
</div>
|
||||||
|
<div class="flex items-center space-x-6">
|
||||||
|
<f:if condition="{item.data.facebook_url}">
|
||||||
|
<a href="{item.data.facebook_url}" target="_blank" title="{item.data.name} bei Facebook">
|
||||||
|
<svg class="w-8 h-8 {ep:themeClasses(classes: '{sbw: \'text-sbw-primary\', snz: \'text-snz-primary\', suz: \'text-suz-primary\', uch: \'text-uch-primary\'}', key: settings.themekey)}">
|
||||||
|
<use href="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/icons_sprite.svg')}#icon-facebook"></use>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
</f:if>
|
||||||
|
<f:if condition="{item.data.twitter_url}">
|
||||||
|
<a href="{item.data.twitter_url}" target="_blank" title="{item.data.name} bei Twitter">
|
||||||
|
<svg class="w-8 h-8 {ep:themeClasses(classes: '{sbw: \'text-sbw-primary\', snz: \'text-snz-primary\', suz: \'text-suz-primary\', uch: \'text-uch-primary\'}', key: settings.themekey)}">
|
||||||
|
<use href="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/icons_sprite.svg')}#icon-twitter"></use>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
</f:if>
|
||||||
|
<f:if condition="{item.data.instagram_url}">
|
||||||
|
<a href="{item.data.instagram_url}" target="_blank" title="{item.data.name} bei Instagram">
|
||||||
|
<svg class="w-8 h-8 {ep:themeClasses(classes: '{sbw: \'text-sbw-primary\', snz: \'text-snz-primary\', suz: \'text-suz-primary\', uch: \'text-uch-primary\'}', key: settings.themekey)}">
|
||||||
|
<use href="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/icons_sprite.svg')}#icon-instagram"></use>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
</f:if>
|
||||||
|
<f:if condition="{item.data.youtube_url}">
|
||||||
|
<a href="{item.data.youtube_url}" target="_blank" title="{item.data.name} bei YouTube">
|
||||||
|
<svg class="w-8 h-8 {ep:themeClasses(classes: '{sbw: \'text-sbw-primary\', snz: \'text-snz-primary\', suz: \'text-suz-primary\', uch: \'text-uch-primary\'}', key: settings.themekey)}">
|
||||||
|
<use href="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/icons_sprite.svg')}#icon-youtube"></use>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
</f:if>
|
||||||
|
<f:if condition="{item.data.soundcloud_url}">
|
||||||
|
<a href="{item.data.soundcloud_url}" target="_blank" title="{item.data.name} bei Soundcloud">
|
||||||
|
<svg class="w-8 h-8 {ep:themeClasses(classes: '{sbw: \'text-sbw-primary\', snz: \'text-snz-primary\', suz: \'text-suz-primary\', uch: \'text-uch-primary\'}', key: settings.themekey)}">
|
||||||
|
<use href="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/icons_sprite.svg')}#icon-soundcloud"></use>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
</f:if>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</f:for>
|
||||||
|
</div>
|
||||||
|
</f:section>
|
||||||
|
|
||||||
|
</html>
|
||||||
Reference in new issue
Block a user