srhinow / teaser-manager
Teaser-Boxen zentral verwalten für das Contao CMS
Package info
gitlab.com/srhinow/teaser-manager
Type:contao-bundle
pkg:composer/srhinow/teaser-manager
Requires
- php: ^8.3
- contao/core-bundle: ^5.3
Requires (Dev)
- doctrine/dbal: ^3.6
- phpunit/phpunit: ^10.5
README
Contao-Bundle zur zentralen Verwaltung von Teaser-Boxen mit Teaser-Gruppen und Kategorien. Inhalte werden einmalig als Teaser angelegt, in Gruppen zusammengefasst und über Seiten-Whitelist oder Seiten-Blacklist gezielt im Frontend ausgespielt.
Anforderungen
| Abhängigkeit | Version |
|---|---|
| PHP | ^8.3 |
| Contao Core Bundle | ^5.3 |
Installation
composer require srhinow/teaser-manager
Nach der Installation die Datenbank-Migration ausführen:
php bin/console contao:migrate
Backend
Das Bundle registriert zwei Backend-Module unter der Gruppe Inhalte:
Teaser (tm_teaser)
Verwaltung einzelner Teaser-Datensätze. Jeder Teaser enthält interne Metadaten (Bezeichnung, Kategorie, Status) und wird über untergeordnete Inhaltselemente (tl_content) mit Inhalten befüllt.
- Tabellen:
tl_teaser,tl_content
Teaser-Gruppen (tm_teaser_group)
Zusammenstellung ausgewählter Teaser zu einer Gruppe sowie Zuweisung an Seiten. Von hier aus können auch die Teaser-Kategorien verwaltet werden.
- Tabellen:
tl_teaser_group,tl_teaser_categories
Datenbankstruktur
tl_teaser
| Spalte | Typ | Beschreibung |
|---|---|---|
id | int(10) unsigned PK AI | Primärschlüssel |
tstamp | int(10) unsigned | Zeitstempel letzte Änderung |
dateAdded | int(10) unsigned | Erstellungsdatum |
internTitle | varchar(255) | Interne Bezeichnung (Pflichtfeld) |
cssID | varchar(255) | CSS-ID und CSS-Klassen |
category | varchar(25) | Kategoriezuordnung (Pflichtfeld) |
teaser_template | varchar(32) | Zugewiesenes Template (Standard: tm_teaser_default) |
featured | char(1) | Hervorgehoben-Flag |
active | char(1) | Aktiv/Inaktiv-Status |
Indizes: id (PRIMARY), active (INDEX)
tl_teaser_group
| Spalte | Typ | Beschreibung |
|---|---|---|
id | int(10) unsigned PK AI | Primärschlüssel |
tstamp | int(10) unsigned | Zeitstempel letzte Änderung |
dateAdded | int(10) unsigned | Erstellungsdatum |
internTitle | varchar(255) | Interne Bezeichnung (Pflichtfeld) |
inContainer | varchar(64) | Teaser-Kategorie (→ tl_teaser_categories.name, Pflichtfeld) |
teaser | blob | Ausgewählte Teaser-IDs (serialisiert) |
custom_pages | char(1) | Aktiviert Seiten-Whitelist |
pages | blob | Seiten-Whitelist (serialisierte Seiten-IDs) |
exceptions | char(1) | Aktiviert Seiten-Blacklist |
exceptions_pages | blob | Seiten-Blacklist (serialisierte Seiten-IDs) |
featured | char(1) | Hervorgehoben-Flag |
active | char(1) | Aktiv/Inaktiv-Status |
Seitenzuweisungs-Logik:
custom_pages = 0: Gruppe wird auf allen Seiten angezeigt.custom_pages = 1: Gruppe wird nur auf den inpagesgelisteten Seiten angezeigt.exceptions = 1: Die inexceptions_pagesgelisteten Seiten werden ausgeschlossen.
tl_teaser_categories
| Spalte | Typ | Beschreibung |
|---|---|---|
id | int unsigned PK AI | Primärschlüssel |
sorting | int unsigned | Sortierreihenfolge |
tstamp | int unsigned | Zeitstempel |
modify | int unsigned | Reserviertes Änderungsdatum |
name | varchar(255) | Kategoriename (Pflichtfeld) |
alias | varchar(128) | Alias/Slug |
Standard-Kategorien (automatisch bei erster Migration angelegt):
| Alias | Name |
|---|---|
sidebar | Seitenleiste |
msgbar | Hinweisbereich |
main_teaser | Teaser im Hauptbereich |
Inhaltselemente
tm_teaser_element — Teaser-Element
Wird innerhalb eines Teaser-Datensatzes als Inhaltselement verwendet. Ermöglicht das Befüllen mit Überschrift, Text, Bild und Link.
Zusatzfelder in tl_content:
| Feld | Typ | Beschreibung |
|---|---|---|
addTeaserImage | boolean | Bild aktivieren (klappt Subpalette singleSRC auf) |
addLink | boolean | Link aktivieren (klappt url, titleText, target auf) |
imgSize | varchar(64) | Bildgröße |
Template: tm_teaser_element.html.twig
tm_teaser — Einzelner Teaser
Content-Element: Gibt einen per Dropdown ausgewählten Teaser im Frontend aus.
Template: tm_teaser.html.twig
tm_teaser_group — Teaser-Gruppe
Content-Element: Gibt alle Teaser einer ausgewählten Teaser-Gruppe aus.
Template: tm_group.html.twig
Frontend-Modul
teaser_group_module — Teaser-Gruppe
Liest automatisch alle aktiven Teaser-Gruppen der gewählten Kategorie für die aktuelle Seite und rendert diese. Die Whitelist/Blacklist-Seitenzuweisung wird vollautomatisch ausgewertet.
Zusatzfelder in tl_module:
| Feld | Typ | Beschreibung |
|---|---|---|
tm_inContainer | varchar(64) | Teaser-Kategorie (→ tl_teaser_categories.name) |
tm_teaser_groups | int(10) | Alternative: Direkte Auswahl einer Teaser-Gruppe |
Template: tm_group.html.twig
Templates
tm_teaser_element.html.twig
Rendert ein einzelnes Teaser-Inhaltselement.
| Variable | Typ | Beschreibung |
|---|---|---|
class | string | CSS-Klassen (inkl. featured wenn hervorgehoben) |
headline | string | Überschrift |
hl | string | Überschriften-Tag (z. B. h2) |
text | string | Teaser-Text (HTML, \|raw ausgeben) |
addLink | bool | Link aktiv? |
url | string | Link-URL |
titleText | string | Link-Titel (title-Attribut) |
target | bool | In neuem Tab öffnen? |
addTeaserImage | bool | Bild aktiv? |
teaserImage | string | Gerendertes Bild-HTML (\|raw) |
tm_teaser.html.twig
Wrapper für das Content-Element tm_teaser. Gibt {{ teaser | raw }} aus.
tm_group.html.twig
Wrapper für Content-Element tm_teaser_group und das Frontend-Modul. Gibt alle Teaser der Gruppe als {{ teaser | raw }} aus.
Migrationen
PopulateTeaserCategoriesMigration
Legt beim ersten Start die drei Standard-Kategorien in tl_teaser_categories an, sofern die Tabelle leer ist.
TeaserToContentElementMigration
Migriert bestehende Legacy-Teaser-Daten (alte Felder headline, text, image, url, linkTitle direkt in tl_teaser) automatisch in neue tm_teaser_element-Inhaltselemente in tl_content.
Changelog
Alle Änderungen sind in CHANGELOG.md dokumentiert.
Lizenz
LGPL-3.0-or-later
Autor
Sven Rhinow — sr-tag.de
Support: kservice@sr-tag.de
Quellcode: gitlab.com/srhinow/teaser-manager