Zum Inhalt springen
Marketing Factory Digital GmbH
Kontakt
Logo Marketing Factory Digital GmbH
  • Agentur
    • Aktuelles
    • Über uns
    • Geschichte
  • Leistungen
    • Beratung, Analyse und Strategie
    • Programmierung und Entwicklung
      • Schnittstellen
      • PIM-/ERP-Anbindungen
      • Individualentwicklungen
      • Seamless CMS Integration
    • Hosting und Betreuung
      • Cloud-Strategien
      • Hosting Partner der Marketing Factory
    • Leistungen mit Dritten
  • Technologie
    • TYPO3
      • Aktuelle TYPO3-Versionen
    • Shopware
    • IT-Sicherheit
      • DDoS-Protection
      • Continuous Upgrading
      • Privacy First
    • Tech Stack
      • Bekenntnis zu Open Source
      • Technologieauswahl
      • PHP-Ökosystem
      • Containerisierung & Clustering
      • Content Delivery Networks
      • Suchtechnologien
  • Referenzen
    • Projekte
    • Kunden
      • Kundenliste
    • Screenshot der Homepage der neuen Maxion Wheels WebsiteNEU: Relaunch der Corporate Website von Maxion Wheels
  • Community
    • Community-Initiativen
  • Blog
  • Kontakt
  • Deutsch
  • English

Sie sind here:

  1. Blog
  2. Container-Elemente sinnvoll erweitern
  • Development
  • TYPO3
  • Tutorial
07.03.2022

Container-Elemente sinnvoll erweitern


Teil drei unserer Reihe zur Gridelements-Migration. Endlich haben wir Code-Beispiele für euch! Wir zeigen euch, wie wir neue Backend-Felder zielgerichtet zuweisen und Container-Elemente für unsere Zwecke erweitern. Außerdem gibt es Tipps zur Erweiterung der Container im aktuellen Bootstrap Package (Version 12).

Was kein Thema sein wird: die Grundkonfiguration von Container-Elementen. Das haben die Kollegen von b13 schon perfekt in ihrem Blog erklärt.

Wohin mit dem Backend-Feld?

Ob wir nun die Flexform-Settings alter Gridelements migrieren müssen oder neue Funktionen bereitstellen: irgendwo muss ein neues Feld angelegt werden. Gehört das nun in das Container-Element oder das einzelne Inhaltselement?

Wir haben hierfür eine kleine Faustregel aufgestellt:

Konfigurationen werden …

  • … in Containern bereitgestellt,
    falls sie deren Layout betreffen
    z. B.: Spalten-Abstände, Breakpoints
  • … in Inhaltselementen bereitgestellt,
    falls sie für das Aussehen des Inhalts verantwortlich sind
    z. B.: Hintergrundfarben, Animationen

Die Inhalte eures Containers sollen einen Rahmen erhalten? Dann sollte das in den Inhaltselementen selbst gepflegt werden können, etwa über eine Frame-Klasse (oder ein eigenes Auswahlfeld).

Wenn es dann um die Ausrichtung der Elemente innerhalb des Containers geht, könnt ihr entsprechende Optionen im Container bereitstellen. Zum Beispiel: eine horizontale Zentrierung – oder Equal-Height-Columns, damit alle Rahmen dieselbe Höhe erreichen.

Notiz am Rande: Bitte nie bestehende Felder zweckentfremden, sondern immer ein neues Datenbank­feld anlegen und konfigurieren. Wie das geht, wird in der TYPO3-Dokumentation erläutert.

Eigene Feld-Paletten für Container

Über das Table Configuration Array (TCA) von TYPO3 können wir die Backend-Felder konfigurieren. Die Felder können einem Element einzeln oder als Gruppe (“Palette”) zugewiesen werden.

In unseren letzten Projekten haben wir die Container-Elemente meist um drei eigene TCA-Paletten ergänzt:

  1. Eine Palette projektspezifischer Felder (wie oben erklärt)
  2. Eine angepasste Palette für den Header des Containers
  3. Eine angepasste Frames-Palette

Per Default wird der Header eines Containers nicht im Frontend gerendert. Wir halten dies aber in vielen Projekten für sinnvoll. Daher geben wir zusätzliche Felder für Überschrift-Typ, Ausrichtung und Link aus.

Die Standard-Palette “Frames” enthält die Felder für Abstand davor/danach, Layout und Frame-Klassen. Da wir Container üblicherweise nicht durch Layouts und Frames erweitern, besitzt unsere reduzierte TCA-Palette nur die Felder für Abstände.

Im ersten Schritt definieren wir die neuen TCA-Paletten, im Anschluss werden sie mit “showItem” dem CType des Containers zugewiesen.

EXT:sitepackage/Configuration/TCA/Overrides/container.php

$GLOBALS['TCA']['tt_content']['palettes'] += [
    'containerSettings' => [
        'label' => 'Container Settings',
        'showitem' => '
            equal_height,
        ',
    ],
    'containerHeader' => [
        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header',
        'showitem' => '
            header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_formlabel,
            --linebreak--,
            header_layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_layout_formlabel,
            header_position;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_position_formlabel,
            --linebreak--,
            header_link;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_link_formlabel
        ',
    ],
    'containerFrames' => [
        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames',
        'showitem' => '
            space_before_class;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:space_before_class_formlabel,
            space_after_class;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:space_after_class_formlabel,
        ',
    ],
];

$GLOBALS['TCA']['tt_content']['types']['container_2_columns']['showitem'] = '
        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
            --palette--;;general,
            --palette--;;containerHeader,
            --palette--;;containerSettings,
        --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
            --palette--;;containerFrames,
            --palette--;;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--;;access,
        --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,
';

 

Zeige größere Version von: Screenshot TYPO3-Backend
Backend-Modul „Configuration“: Das TCA der Container-Elemente findet ihr unterhalb von „tt_content“.

Container im Bootstrap Package

Das Bootstrap Package beinhaltet ab Version 12 (TYPO3 10.4 bis 11.5) sechs vorkonfigurierte Container. Die Konfigurationen werden nur geladen, wenn EXT:container im Projekt installiert ist.

Weitere Konfigurationen für diese Container könnt ihr nicht nachträglich über “configureContainer()” ergänzen. Stattdessen benötigt ihr TCA-Overrides. Das richtige Array könnt ihr im Backend-Modul “Configuration” ermitteln.

Im folgenden Beispiel erlauben wir fünf CTypes innerhalb des zweispaltigen Containers.

$allowedCTypes = 'text, textmedia, image, accordion, texticon';
$GLOBALS['TCA']['tt_content']['containerConfiguration']['container_2_columns']['grid']['0']['0']['allowed']['CType'] = $allowedCTypes;
$GLOBALS['TCA']['tt_content']['containerConfiguration']['container_2_columns']['grid']['0']['1']['allowed']['CType'] = $allowedCTypes;

Ein Hinweis an die Frontend-Entwickler: Die Container verwenden nicht das Bootstrap-Grid, sondern ein eigenes CSS-Grid, deren Ausrichtung anhand von Data-Attributen definiert wird.

.contentcontainer[data-container-identifier="container_2_columns_right"] {
    @include media-breakpoint-up('md') {
        grid-template-columns: 1fr 2fr;
    }
    @include media-breakpoint-up('lg') {
        grid-template-columns: 1fr 3fr;
    }
}

Wir haben in unserem Projekt die “Fraction”-Werte angepasst, weil uns das Größenverhältnis der Spalten zu deutlich erschien.

.contentcontainer[data-container-identifier="container_2_columns_right"] {
   @include media-breakpoint-up("md") {
        grid-template-columns: 2fr 3fr;
    }

    @include media-breakpoint-up("lg") {
        grid-template-columns: 3fr 5fr;
    }
}

Im vierten und letzten Teil geht es um die Migration bestehender Datensätze.

Sebastian Klein

Steht irgendwo zwischen Front- und Backend. Mit einem Faible für Usability und Dokumentation. Immer auf der Suche nach Good Practices.

Weitere Beiträge dieses Autors

Blog als RSS-Feed abonnieren

Alle Teile der Blogreihe

  1. Fehler der Vergangenheit: Wie wir Gridelements systematisch ersetzen
  2. Planung ist die halbe Migration: Was beim Gridelements-Wechsel zu beachten ist
  3. Container-Elemente sinnvoll erweitern
  4. Hilf mir, TYPO3 Upgrade Wizard! Gridelements-Datensätze sauber migrieren.

Wir freuen uns, wenn Ihr diesen Beitrag teilt.


Kommentare

Keine Kommentare gefunden.

Kommentar verfassen.

Ich bin darauf hingewiesen worden, dass die Verarbeitung meiner Daten auf freiwilliger Basis erfolgt und dass ich mein Einverständnis ohne für mich nachteilige Folgen verweigern bzw. jederzeit gegenüber der Marketing Factory Digital GmbH per Post (Marienstraße 14, D-40212 Düsseldorf) oder E-Mail (info@marketing-factory.de) widerrufen kann.

Mir ist bekannt, dass die oben angegebenen Daten so lange gespeichert werden, wie ich die Kontaktaufnahme durch Marketing Factory wünsche. Nach meinem Widerruf werden meine Daten gelöscht. Eine weitergehende Speicherung kann im Einzelfall erfolgen, wenn dies gesetzlich vorgeschrieben ist.

  • Datenschutzerklärung
  • Impressum

© Marketing Factory Digital GmbH

Bildnachweise
  1. "Screenshot: Backend-Modul "Configuration"": © Sebastian Klein / Marketing Factory Digital GmbH
  2. "Beitragsbild Container-Konfiguration": © Sebastian Klein / Marketing Factory Digital GmbH