Zum Inhalt springen

Eigene Elemente in die Auswahlliste hinzufügen

Erstellt am 17. Juli 2020 · 1 Antwort · letzte Antwort am 17. Juli 2020

Tags: TCA, Inhaltselemente, TYPO3 9, Frage

mimii ·

Hallo ins Forum,

ich möchte die Auswahlliste "Typ" beim Contentelement mit meinen eigenen Elementen (Carousel, Accordion) erweitern und zwar gruppiert. Hierzu habe ich zunächst eine Gruppenüberschrift angelegt, die nach Standard (mit den Unterelementen Überschrift und Text & Medien) erscheint.
tt_content.php

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTcaSelectItem(
'tt_content',
'CType',
[
'Meine Elemente',
'--div--'
],
'--div--',
'after'
);

Nun füge ich meine beiden Elemente hinzu

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTcaSelectItem(
    'tt_content',
    'CType',
    [
        'Carousel',
        'sitepackage_carousel'
    ],
    '--div--',
    'after'
);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTcaSelectItem(
    'tt_content',
    'CType',
    [
        'Accordion',
        'sitepackage_accordion'
    ],
    '--div--',
    'after'
);

Diese stehen dann aber unter Standard und nicht unter "Meine Elemente".Die Auswahlliste für den Typ sieht also so aus:

Standard
- Carousel
- Accordion

Meine Elemente
- Überschrift
- Text & Medien

Listen
- ...

Wie kann ich das nach meinen Wünschen sortieren?

Danke für n Tipp und Gruß
mimii

Forumsbote ·

🤖 KI-Antwort des Forumsboten · automatisch erstellt und von einer zweiten KI gegengeprüft, ohne Gewähr.

addTcaSelectItem() sucht den Eintrag, dessen Wert gleich $relativeToField ist, und nimmt den ersten Treffer. Alle Gruppenüberschriften haben den Wert --div--. Deshalb landet bei dir alles direkt hinter der ersten Überschrift „Standard“.

Positioniere stattdessen relativ zu eindeutigen Werten. In TYPO3 9 ist textmedia der letzte Eintrag der Gruppe „Standard“ (danach kommt „Listen“). In Configuration/TCA/Overrides/tt_content.php:

use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;

// 1. Carousel hinter "Text & Medien"
ExtensionManagementUtility::addTcaSelectItem(
    'tt_content', 'CType',
    ['Carousel', 'sitepackage_carousel'],
    'textmedia', 'after'
);
// 2. Accordion hinter Carousel
ExtensionManagementUtility::addTcaSelectItem(
    'tt_content', 'CType',
    ['Accordion', 'sitepackage_accordion'],
    'sitepackage_carousel', 'after'
);
// 3. Gruppenüberschrift zwischen "Text & Medien" und Carousel
ExtensionManagementUtility::addTcaSelectItem(
    'tt_content', 'CType',
    ['Meine Elemente', '--div--'],
    'textmedia', 'after'
);

Ergebnis: Standard (… Text & Medien), Meine Elemente (Carousel, Accordion), Listen, …

Wenn die Gruppe einfach ganz unten stehen darf, lass die letzten beiden Parameter weg. Dann wird in der Reihenfolge der Aufrufe ans Ende angehängt (erst --div--, dann Carousel, dann Accordion).

In aktuellen Versionen (ab TYPO3 10.4) gibt es dafür echte Gruppen: ExtensionManagementUtility::addTcaSelectItemGroup('tt_content', 'CType', 'meine', 'Meine Elemente', 'after:lists') und beim Item die Gruppen-ID als viertes Element. Siehe Changelog: Item grouping for TCA select items.