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. Feld text oder rsce_data)
  • tl_module (z. B. Felder html, cssID)
  • tl_layout (z. B. Feld cssClass)
  • tl_form_field (z. B. Feld class)

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.

Zurück zur Blog-Übersicht