schachbulle / contao-figcaption-bundle
Ersetzt in Bildunterschriften einen von Platzhaltern umklammerten Text, damit sich zum Beispiel der Fotograf gesondert auszeichnen lässt.
Package info
github.com/Samson1964/contao-figcaption-bundle
Type:contao-bundle
pkg:composer/schachbulle/contao-figcaption-bundle
Requires
- php: ^8.1
- contao/core-bundle: ^4.13 || ^5.0
- symfony/config: ^5.4 || ^6.4 || ^7.0
- symfony/dependency-injection: ^5.4 || ^6.4 || ^7.0
- symfony/http-kernel: ^5.4 || ^6.4 || ^7.0
- symfony/yaml: ^5.4 || ^6.4 || ^7.0
Requires (Dev)
- contao/manager-plugin: ^2.0
- phpunit/phpunit: ^9.6
Conflicts
- contao/core: *
- contao/manager-plugin: <2.0 || >=3.0
README
Diese Erweiterung schneidet aus Bildunterschriften einen von Trennzeichen umklammerten Text heraus und setzt ihn – in eine frei wählbare HTML-Vorlage verpackt – als eigenen Block an den Anfang der Bildunterschrift. Damit lässt sich zum Beispiel der Fotograf oder eine Quellenangabe gesondert auszeichnen, ohne dass dafür ein eigenes Feld oder ein eigenes Template nötig wäre.
Die Bildunterschrift wird dabei so gepflegt, wie sie sich am natürlichsten schreibt – die Quellenangabe steht mitten im Satz und wird von der Erweiterung automatisch herausgelöst.
- Voraussetzungen: Contao 4.13 LTS oder Contao 5, PHP 8.1 oder neuer
- Lizenz: LGPL-3.0-or-later
Installation
Über den Contao Manager nach contao-figcaption-bundle suchen und installieren, oder auf der
Kommandozeile:
composer require schachbulle/contao-figcaption-bundle
Anschließend den Contao-Cache leeren (Contao Manager → Wartung → Anwendungs-Cache neu aufbauen, oder
vendor/bin/contao-console cache:clear). Eine Datenbank-Migration ist nicht nötig, die Erweiterung
legt keine Tabellen an.
Einstellungen
Die Erweiterung wird im Backend unter System → Einstellungen im Abschnitt Bildunterschriften konfiguriert:
| Einstellung | Bedeutung | Voreinstellung |
|---|---|---|
| Ersetzung aktivieren | Schaltet die Erweiterung global ein oder aus. Ist der Haken nicht gesetzt, bleiben alle Bildunterschriften unverändert – auch die bereits gepflegten Trennzeichen bleiben dann sichtbar im Text stehen. | aktiv |
| Start-Trennzeichen | Zeichen oder Zeichenfolge, an der die Quellenangabe beginnt. | [ |
| Ende-Trennzeichen | Zeichen oder Zeichenfolge, an der die Quellenangabe endet. | ] |
| Ersetzen durch | HTML-Vorlage für die Ausgabe. Der Platzhalter %s wird durch den Text zwischen den Trennzeichen ersetzt. |
<div class="rechte">%s</div> |
| Position der Quellenangabe | Ob die Quellenangabe in der Bildunterschrift bleibt oder aus ihr herausgelöst und direkt hinter das Bild gesetzt wird – siehe Position der Quellenangabe. | In der Bildunterschrift |
Die vier unteren Felder erscheinen erst, wenn Ersetzung aktivieren angehakt ist. Alle Einstellungen gelten für die gesamte Installation; eine Einstellung pro Seite oder pro Inhaltselement gibt es nicht.
Verwendung
Die Quellenangabe wird direkt in die Bildunterschrift geschrieben – dort, wo sie inhaltlich hingehört. Bildunterschriften pflegt man in Contao je nach Kontext an unterschiedlichen Stellen, zum Beispiel:
- Inhaltselement Bild → Feld Bildunterschrift
- Inhaltselement Bildergalerie → Bildunterschrift der einzelnen Datei
- Nachrichten, Events, Formulare und eigene Elemente, sofern deren Template ein
<figcaption>ausgibt - Dateiverwaltung → Metadaten einer Datei, Feld Bildunterschrift
Beispiel
Eingabe im Backend:
Links steht Hans Mustermann,[Holger Mustermann] rechts Berta Mustermann.
Ausgabe im Frontend (mit der Standard-Vorlage <div class="rechte">%s</div>):
<figcaption class="caption"> <div class="rechte">Holger Mustermann</div>Links steht Hans Mustermann, rechts Berta Mustermann. </figcaption>
Der umklammerte Text wird also an seiner ursprünglichen Stelle entfernt und dem Rest der Bildunterschrift vorangestellt. Das ist Absicht: Die Standard-Vorlage ist ein eigenes Block-Element, das per CSS unabhängig vom Fließtext positioniert wird.
Wo genau die Quellenangabe erscheint, entscheidet also das Stylesheet, nicht die Erweiterung. Wird sie – wie beim Deutschen Schachbund – absolut positioniert, ist ihre Stelle im Quelltext für die Darstellung ohnehin bedeutungslos:
.image_container { position: relative; } .image_container .rechte { position: absolute; right: 0; bottom: 0; width: 100%; padding: 18px 5px 5px; font-size: 12px; line-height: 14px; color: #fff; text-align: right; pointer-events: none; opacity: 0; transition: 0.4s ease-in-out; } /* Quellenangabe erst beim Überfahren des Bildes einblenden */ .image_container:hover .rechte { opacity: 1; background-image: linear-gradient(rgba(2, 97, 152, 0) 0%, rgb(0, 37, 51) 100%); } .image_container .rechte::before { content: "© "; }
Schlichter geht es auch: Mit float: right; margin-left: 1em; läuft die Bildunterschrift um die
Quellenangabe herum, mit display: block; text-align: right; steht sie in einer eigenen Zeile.
Position der Quellenangabe
Über die Einstellung Position der Quellenangabe lässt sich umschalten, wohin die fertige Ersetzung geschrieben wird.
In der Bildunterschrift (Voreinstellung) – die Quellenangabe bleibt innerhalb des
<figcaption>-Elements:
<figure class="image_container"> <a href="gross.jpg"><img src="klein.jpg" alt=""></a> <figcaption class="caption"> <div class="rechte">Holger Mustermann</div>Links steht Hans, rechts Berta. </figcaption> </figure>
Vor der Bildunterschrift, direkt hinter dem Bild – die Quellenangabe wird aus der
Bildunterschrift herausgelöst und als eigenständiges Element in die <figure> gesetzt:
<figure class="image_container"> <a href="gross.jpg"><img src="klein.jpg" alt=""></a> <div class="rechte">Holger Mustermann</div> <figcaption class="caption">Links steht Hans, rechts Berta.</figcaption> </figure>
Die zweite Variante ist dann sinnvoll, wenn die Quellenangabe über dem Bild liegen soll statt unter
ihm – etwa als eingeblendeter Streifen am unteren Bildrand –, oder wenn die Bildunterschrift per CSS
ausgeblendet wird, die Quellenangabe aber sichtbar bleiben soll. Für das oben gezeigte
position: absolute macht es dagegen keinen Unterschied: Beide Varianten hängen an derselben
<figure>.
Bildunterschriften, die gar nicht in einer <figure> stehen, werden auch in dieser Betriebsart wie
gewohnt behandelt. So bleiben die Trennzeichen in keinem Fall sichtbar stehen.
Hinweis: Die Quellenangabe wird bewusst nicht in den Bildlink oder einen Container des Themes geschrieben. Diese Struktur unterscheidet sich von Theme zu Theme, die Position unmittelbar vor der
<figcaption>gibt es dagegen immer.
Eigene Vorlagen
Die Vorlage in Ersetzen durch ist beliebiges HTML, solange sie den Platzhalter %s enthält.
Beispiele:
| Vorlage | Ergebnis |
|---|---|
<div class="rechte">%s</div> |
Block-Element mit eigener CSS-Klasse (Standard) |
<span class="foto">Foto: %s</span> |
Inline-Element mit festem Vorspann |
<small>© %s</small> |
Copyright-Zeichen vor dem Namen |
Der Platzhalter darf mehrfach vorkommen; dann wird der Text auch mehrfach eingesetzt.
Eigene Trennzeichen
Start- und Ende-Trennzeichen dürfen auch mehrstellig sein und Sonderzeichen enthalten, etwa ((
und )) oder {{foto: und }}. Sie werden intern maskiert und deshalb immer wörtlich gesucht.
Hinweis: Die geschweifte Doppelklammer
{{ }}ist in Contao die Syntax der Insert-Tags. Wer sie als Trennzeichen verwendet, sollte eine Kombination wählen, die Contao nicht selbst als Insert-Tag interpretiert.
Verhalten im Detail
- Die Erweiterung greift erst am Ende des Seitenaufbaus und bearbeitet das fertige HTML der Seite.
Sie erwischt dadurch jedes
<figcaption>-Element, unabhängig davon, aus welchem Template oder welcher Erweiterung es stammt. Ein eigenes Template muss dafür nicht angepasst werden. - Attribute am
<figcaption>-Tag (etwaclassoderitemprop) bleiben unverändert erhalten. - Pro Bildunterschrift wird nur das erste Vorkommen ersetzt. Mehrere Quellenangaben in einer einzelnen Bildunterschrift sind nicht vorgesehen.
- Mehrere Bilder auf einer Seite werden jeweils einzeln bearbeitet.
- Enthält eine Bildunterschrift keine Trennzeichen, bleibt sie unangetastet.
- Ist eines der Felder Start-Trennzeichen, Ende-Trennzeichen oder Ersetzen durch leer, findet keine Ersetzung statt. Damit kann eine unvollständige Konfiguration die Seite nicht beschädigen.
- Die Ersetzung wirkt ausschließlich im Frontend. Im Backend und in der Suche steht weiterhin der ursprünglich eingegebene Text mit den Trennzeichen.
Fehlersuche
| Beobachtung | Mögliche Ursache |
|---|---|
| Die Trennzeichen stehen sichtbar im Frontend | Ersetzung aktivieren ist nicht angehakt, oder eines der Felder Start-Trennzeichen, Ende-Trennzeichen oder Ersetzen durch ist leer. |
| Nichts passiert, obwohl alles eingestellt ist | Der Anwendungs-Cache ist veraltet. Cache leeren und neu aufbauen. |
| Die HTML-Vorlage erscheint als Text statt als Markup | Die Vorlage wurde beim Speichern maskiert. Sie im Feld Ersetzen durch erneut eingeben und speichern. |
| Die Quellenangabe steht an der falschen Stelle | Das ist eine Frage des CSS, nicht der Erweiterung – siehe Beispiel. |
Entwicklung
Die eigentliche Logik steckt in src/EventListener/FigcaptionListener.php. Die Klasse wird über das
Attribut #[AsHook('modifyFrontendPage')] registriert, das Contao 4.13 und Contao 5 gleichermaßen
kennen.
Unit-Tests ausführen:
vendor/bin/phpunit
Entwickler
Frank Binding
