Contao-Update: CSS-Klassen in MySQL automatisiert ersetzen
Anleitung für Contao 5.3
Beim Update von Contao 4 auf 5 genügt es nicht, ausschließlich im Stylesheet die alten Klassennamen wie .ce_
durch .content-
zu ersetzen. Viele Klassennamen werden auch direkt in der MySQL-Datenbank gespeichert, etwa in Inhalts- und Modultabellen. Wer hier manuell Änderungen durchführt, riskiert nicht nur Fehler, sondern investiert auch unnötig viel Zeit.
Eine praktikable Lösung ist die automatisierte Ersetzung mit PHP und gezielten SQL-Befehlen. Ein großes Update erfordert Erfahrung und Sorgfalt. Die Agentur Zentral GmbH übernimmt den sicheren Umstieg von Contao 4 auf 5.
Tabellen und Spalten mit gespeicherten Klassennamen
Klassennamen können in unterschiedlichen Tabellen und Spalten gespeichert sein. Häufig betroffen sind:
tl_content
(z. B. Feldtext
oderrsce_data
)tl_module
(z. B. Felderhtml
,cssID
)tl_layout
(z. B. FeldcssClass
)tl_form_field
(z. B. Feldclass
)
Besonders bei den Rocksolid Custom Elements ist Vorsicht geboten, da deren Konfiguration in einem Blob gespeichert wird. Dennoch ist ein automatisches Ersetzen im Feld rsce_data
möglich.
Automatisierte Ersetzung mit PHP
Das folgende Skript stellt eine Verbindung zur Datenbank her und ersetzt definierte Werte in den entsprechenden Tabellen und Spalten.
<?php
// Datenbankverbindung herstellen (Zugangsdaten anpassen)
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database";
$conn = new mysqli($servername, $username, $password, $dbname);
// Fehlerprüfung bei der Verbindung
if ($conn->connect_error) {
die("Verbindung fehlgeschlagen: " . $conn->connect_error);
}
// Liste der zu ersetzenden Werte und deren neuen Werte
$replacements = array(
array('table' => 'tl_content', 'column' => 'text', 'old_value' => 'css_klasse', 'new_value' => 'css-klasse'),
array('table' => 'tl_module', 'column' => 'html', 'old_value' => 'css_klasse', 'new_value' => 'css-klasse'),
array('table' => 'tl_module', 'column' => 'cssID', 'old_value' => 'css_klasse', 'new_value' => 'css-klasse'),
array('table' => 'tl_layout', 'column' => 'cssClass', 'old_value' => 'css_klasse', 'new_value' => 'css-klasse'),
array('table' => 'tl_form_field', 'column' => 'class', 'old_value' => 'css_klasse', 'new_value' => 'css-klasse'),
array('table' => 'tl_content', 'column' => 'rsce_data', 'old_value' => 'css_klasse', 'new_value' => 'css-klasse')
);
// Durchlaufen der Liste und Ausführen der Aktualisierungen
foreach ($replacements as $replacement) {
$table = $replacement["table"];
$column = $replacement["column"];
$old_value = $replacement["old_value"];
$new_value = $replacement["new_value"];
$sql = "UPDATE `$table` SET `$column` = REPLACE(`$column`, '$old_value', '$new_value')";
if ($conn->query($sql) === TRUE) {
echo "Tabelle '$table', Spalte '$column': '$old_value' erfolgreich ersetzt durch '$new_value'<br>";
} else {
echo "Fehler beim Aktualisieren von '$table', Spalte '$column': " . $conn->error . "<br>";
}
}
// Verbindung schließen
$conn->close();
?>
Vorteile dieser Methode
- Alle relevanten Tabellen und Spalten lassen sich in einer zentralen Liste definieren.
- Die Ersetzungen erfolgen automatisiert und einheitlich.
- Auch komplexere Felder wie
rsce_data
in Rocksolid Custom Elements können berücksichtigt werden.
Fazit
Beim Update auf Contao 5 ist es nicht ausreichend, Änderungen nur in den CSS-Dateien vorzunehmen. Klassennamen, die in der Datenbank gespeichert sind, müssen ebenso angepasst werden. Mit einem automatisierten Skript lassen sich diese Änderungen effizient und fehlerfrei durchführen – auch in komplexen Strukturen wie den Rocksolid Custom Elements.