berecont / contao-html-attributes-bundle
Fügt ausgewählten Contao-Inhaltselementen konfigurierbare benutzerdefinierte HTML-Attribute hinzu.
Package info
github.com/berecont/contao-html-attributes-bundle
Type:contao-bundle
pkg:composer/berecont/contao-html-attributes-bundle
Requires
- php: ^8.3 || ^8.4
- contao/core-bundle: ^5.7
- contao/manager-bundle: ^5.7
Requires (Dev)
- contao/manager-plugin: ^2.0
Suggests
None
Provides
None
Conflicts
- contao/manager-plugin: <2.0 || >=3.0
Replaces
None
README
Mit dem Contao HTML Attributes Bundle können Inhaltselemente in Contao ab Version 5.7 um zusätzliche HTML-Attribute ergänzt werden.
Die Attribute werden komfortabel über den rowWizard im Bereich Experteneinstellungen gepflegt und am äusseren Wrapper des Inhaltselements ausgegeben.
Anwendungsfälle sind beispielsweise:
data-controller="timeline" data-animation="fade" aria-label="Weitere Informationen" role="region" style="--animation-delay: 200ms"
Auch Insert-Tags können in den Attributwerten verwendet werden.
aria-label="aktuelles Jahr {{date::Y}}"
Voraussetzungen
- PHP
^8.3 || ^8.4 - Contao
^5.7
Installation
Composer
composer require berecont/contao-html-attributes-bundle
Das Bundle wird als Composer-Paket in einer Contao-Installation eingebunden. Nach der Installation bzw. nach Änderungen am Bundle sollte der Anwendungscache geleert werden:
php vendor/bin/contao-console cache:clear
Contao Manager
Unter Pakete nach berecont/contao-html-attributes-bundle suchen, auswählen und installieren.
Verwendung
Für freigeschaltete Inhaltselemente erscheint unter Experteneinstellungen neben dem Contao-Feld CSS-ID/Klasse das zusätzliche Feld:
Zusätzliche HTML-Attribute
Die Eingabe erfolgt zeilenweise mit zwei Feldern - zum Beispiel:
| Attribut | Wert |
|---|---|
data-controller |
timeline |
data-animation |
fade |
aria-label |
Timeline {{date::Y}} |
role |
region |
Daraus wird beispielsweise:
<div class="content-text" data-controller="timeline" data-animation="fade" aria-label="Timeline 2026" role="region" > ... </div>
Konfiguration der Inhaltselemente
Standardmässig sind keine Felder für Contao-Inhaltselemente aktiviert.
Vorbereitet (auskommentiert) in der src/BerecontContaoHtmlAttributesBundle.php sind jedoch:
text
element_group
public function configure(DefinitionConfigurator $definition): void
{
$definition->rootNode()
->children()
->arrayNode('content_elements')
->scalarPrototype()->end()
->defaultValue([
// 'text',
// 'element_group',
])
->end()
->end()
;
}
Inhaltselemente werden in der Projektkonfiguration unter config/config.yaml freigeschalten.
Beispiel:
berecont_contao_html_attributes: content_elements: - text - element_group - image
Die Liste ist eine Positivliste. Das Feld wird ausschliesslich bei den dort eingetragenen Inhaltselement-Typen angezeigt.
Dadurch erhalten neu installierte oder anderweitig registrierte Inhaltselemente nicht automatisch zusätzliche HTML-Attribute.
Hinweis: Sollte in der Contao-Installation noch keine
config/config.yamlvorhanden sein, so muss diese manuell angelegt werden.
Eigene Inhaltselemente und RSCE
Die Konfiguration ist nicht auf Core-Inhaltselemente beschränkt. Es kann grundsätzlich jeder vorhandene tl_content.type eingetragen werden.
Beispiel mit einem RockSolid Custom Element:
berecont_contao_html_attributes: content_elements: - text - element_group - image - rsce_servicecard
Damit kann das Feld auch gezielt für eigene Content Elements oder Inhaltselemente anderer Extensions aktiviert werden.
Insert-Tags
Insert-Tags sind in den Werten der HTML-Attribute möglich.
Beispiel:
| Attribut | Wert |
|---|---|
aria-label |
Wir schreiben das Jahr {{date::Y}} |
Im Frontend wird der Insert-Tag erst beim Rendern ersetzt:
aria-label="Wir schreiben das Jahr 2026"
Der ursprüngliche Insert-Tag bleibt dabei in den gespeicherten Daten erhalten.
Klassen
Das Attribut class darf zusätzlich verwendet werden.
Vorhandene Klassen des Contao-Inhaltselements werden dabei nicht überschrieben, sondern mit den zusätzlichen Klassen zusammengeführt.
Beispiel:
Contao CSS-ID/Klasse:
btn-primary
Zusätzliches HTML-Attribut:
| Attribut | Wert |
|---|---|
class |
btn |
Kann beispielsweise ergeben:
<div class="btn-primary content-text btn">
ID
Das Attribut id ist über Zusätzliche HTML-Attribute bewusst nicht erlaubt.
Für die HTML-ID soll das bereits vorhandene Contao-Feld CSS-ID/Klasse verwendet werden.
Beispiel:
CSS-ID: testid
ergibt:
<div id="testid" ...>
Ein zusätzlich eingetragenes Attribut wie
| Attribut | Wert |
|---|---|
id |
andere-id |
wird ignoriert und überschreibt die CSS-ID nicht.
Event-Handler
Inline-JavaScript-Eventhandler sind aus Sicherheits- und Wartbarkeitsgründen nicht erlaubt.
Beispiele:
onclick
onload
onerror
onmouseover
Solche Attribute werden bei der Frontend-Ausgabe verworfen.
Für JavaScript-Logik sollten stattdessen beispielsweise data-*-Attribute verwendet und anschliessend über externes JavaScript oder einen Controller verarbeitet werden:
data-controller = gallery
data-action = open
Leere und boolesche Attribute
Attribute dürfen einen leeren Wert besitzen.
Beispiel:
| Attribut | Wert |
|---|---|
hidden |
Die Ausgabe kann dann beispielsweise lauten:
hidden=""
Das ist gültiges HTML. Bei booleschen Attributen wie hidden ist das Vorhandensein des Attributes entscheidend.
Unterstützte Attribute
Das Bundle ist bewusst nicht auf data-* beschränkt.
Mögliche Beispiele sind:
data-controller
data-animation
data-wow-duration
aria-label
aria-describedby
role
title
style
class
hidden
Grundsätzlich werden gültige HTML-Attributnamen akzeptiert.
Ausgenommen sind insbesondere:
id
onclick
onload
onerror
sowie andere mit on beginnende Event-Handler.
Speicherung
htmlAttributes ist ein virtuelles DCA-Feld.
Es wird keine zusätzliche Datenbankspalte in tl_content benötigt.
Unter Contao 5.7 werden die Daten über jsonData des Inhaltselements gespeichert.
Template-Ausgabe
Die zusätzlichen Attribute werden zentral am Wrapper der Content Elements ergänzt.
Das Bundle erweitert dazu:
contao/templates/content_element/_base.html.twig
Dadurch müssen die einzelnen Templates der freigeschalteten Inhaltselemente normalerweise nicht angepasst werden.
Beispielausgabe:
<div id="testid" class="btn-primary content-text btn" aria-label="Wir schreiben das Jahr 2026" data-animation="fade" style="background: red;" role="button" > ... </div>
Beispiel Backend
Hinweise
Das Bundle kann Attribute nur an Inhaltselementen ausgeben, die einen entsprechenden HTML-Wrapper über das Contao Content-Element-Template besitzen.
Bei speziellen Inhaltselementen oder Extensions mit vollständig eigener Template-Struktur kann daher eine gesonderte Integration notwendig sein.
Lizenz
Siehe LICENSE.
