DCA-Konfiguration und Sprachdateien in Contao anpassen

Unter Contao kannst du vielfältige Anpassungen und Erweiterungen an der Datenstruktur mithilfe des sogenannten DCA vornehmen. Zudem hast du die Möglichkeit, die vorgegebenen Sprachdateien zu überschreiben oder zu erweitern. In diesem Beitrag zeige ich dir jeweils ein Beispiel für beide Optionen.

Neu Pfade und Dateien für Contao 4 und neuer

Falls du bereits länger bei Contao aktiv bist, ist dir vielleicht der alte Weg über die dcaconfig.php, langconfig.php und config.php im Unterordner /system/config bekannt. Seit Contao 4 werden die DCA-Konfigurationen nun im Ordner /contao/dca und die Sprachanpassungen im Ordner /contao/languages/xx/ abgelegt.

Siehe folgender Screenshot:

DCA-Konfiguration unter Contao 4 - Ordnerstruktur

Hinweis

Unter Contao 4 kannst du weiterhin deine Anpassungen in dcaconfig.php, langconfig.php und config.php durchführen. Mit dem Update auf Contao 5 ist das nicht mehr möglich und muss in die neue Struktur migriert werden.

Allgemeine Vorgehensweise: DCA-Konfiguration

Falls noch nicht vorhanden, erstellst du im ersten Schritt den Ordner /contao auf der gleichen Ebene, auf der sich auch /templates und /files befinden. Im Ordner /contao legst du einen neuen Unterordner mit dem Namen dca an.

Für jede Tabelle benötigst du eine eigene Datei.

Beispiele:

  • tl_news = Änderungen an den News
  • tl_page = Änderungen an den Seiten

Falls du noch Daten noch aus Contao 3 hast, überträgst du die Einträge aus der früheren dcaconfig.php entsprechend.

Wichtiger Hinweis für ältere Contao-Versionen

Die folgende Anleitung bezieht sich auf Contao 4.9 und neuer. Solltest du noch eine ältere Version wie z. B. Contao 4.4 verwenden, dann nutze bitte anstatt des Ordners /contao den Ordner /app.

Die angepassten Contao-Dateien werden dann in den Ordner /app/Resources/contao abgelegt.

Die alten Pfade lauten in unserem Beispiel wie folgt:

  • /app/Resources/contao/dca/tl_content.php

  • /app/Resources/contao/dca/tl_news.php

  • /app/Resources/contao/dca/tl_member.php

  • /app/Resources/contao/languages/de/default.xlf

Beispiel: HTML in Überschriften erlauben und das Feld Geburtsdatum ausblenden

Unter Contao 3 wurden die folgenden Zeilen in die dcaconfig.php eingefügt.

Contao 3: /system/config/dcaconfig.php

<?php

/* HTML in Überschriften erlauben */
$GLOBALS['TL_DCA']['tl_content']['fields']['headline']['eval']['allowHtml'] = true;
  
/* HTML in News Überschriften bzw. Titel erlauben */
$GLOBALS['TL_DCA']['tl_news']['fields']['headline']['eval']['preserveTags'] = true;

/*Felder im Backend ausblenden*/
unset($GLOBALS['TL_DCA']['tl_member']['fields']['dateOfBirth']);

Ab Contao 4 werden daraus jetzt die 3 folgenden Dateien:

  • tl_content.php
  • tl_news.php
  • tl_member.php

Diese werden alle im Ordner /contao/dca angelegt.

ab Contao 4: /contao/dca/tl_content.php

<?php

/* HTML in Überschriften */
$GLOBALS['TL_DCA']['tl_content']['fields']['headline']['eval']['allowHtml'] = true;

ab Contao 4: /contao/dca/tl_news.php

<?php

/* HTML in News Überschriften bzw. Titel erlauben */
$GLOBALS['TL_DCA']['tl_news']['fields']['headline']['eval']['preserveTags'] = true;

ab Contao 4: /contao/dca/tl_member.php

<?php

/*Felder im Backend ausblenden*/
unset($GLOBALS['TL_DCA']['tl_member']['fields']['dateOfBirth']);

Anwendungs-Cache leeren

Contao Manager: Anwendungs-Cache erneuern

Damit die neue Konfiguration in Contao aktiv wird, musst du jetzt per Contao Manager den Anwendungs-Cache neu aufbauen. (Systemwartung > Prod.-Cache erneuern)

Weitere Beispiele für DCA-Anpassugen

Weitere Beispiele und Code-Sammlungen findest du im Contao Handbuch sowie im Blog von e-spin.

Sprachdateien und Übersetzungen anpassen

Zuerst muss wieder die Ordnerstruktur erweitert werden und unter /contao ein neuer Unterordner mit dem Namen languages erstellt werden.

Zusätzlich muss unter /contao/languages für jede benötigte Sprache ein neuer Ordner mit entsprechendem Sprachcode erstellt werden. Für die deutsche Sprache ist das entsprechend der Ordner de und für Englisch en. Hier werden nun die einzelnen Dateien für die Sprachkonfiguration abgelegt.

Die Sprachdateien können im Format php oder xlf angelegt werden.

Contao 3: /system/config/langconfig.php

<?php

//Weiterlesen News
$GLOBALS['TL_LANG']['MSC']['more'] = 'Mein neuer Weiterlesen-Text …';

Wenn du ab Contao 4 die PHP-Variante verwenden willst, kannst du den Eintrag einfach 1:1 übernehmen und in die default.php schreiben.

ab Contao 4: /contao/languages/de/default.php

<?php

//Weiterlesen News
$GLOBALS['TL_LANG']['MSC']['more'] = 'Mein neuer Weiterlesen-Text …';

Alternativ: /contao/languages/de/default.xlf

<?xml version="1.0" ?><xliff version="1.1">
  <file datatype="php" original="src/Resources/contao/languages/en/default.php" source-language="en" target-language="de">
    <body>
      <trans-unit id="MSC.more">
        <source>Read more …</source>
        <target>Mein neuer Weiterlesen-Text …</target>
      </trans-unit>
    </body>
  </file>
</xliff>

Anwendungscache leeren

Bitte denke daran, dass du nach jeder Änderung der Konfigurationsdateien den Anwendungscache löschen musst.

Exkurs: Wie findest du die richtige Sprachdatei?

Ich möchte dir jetzt noch einen Weg zeigen, wie du die korrekte Sprachdatei findest.

Zunächst durchsuchst du dazu die originalen Sprachdateien nach dem zu ersetzenden Begriff. Alle Sprachdateien, die das Contao Basissystem betreffen, findest du unter folgendem Verzeichnis:
vendor/contao/core-bundle/src/Resources/contao/languages

Diese sind inzwischen im xlf-Format. In unserem Beispiel suchen wir nach "Weiterlesen …" und finden den Eintrag in der Datei default.xlf.

Nun legen wir eine neue default.xlf (siehe vorherigen Absatz) an und übertragen die nötigen Zeilen. Wichtig ist, dass du den richtigen Aufbau der Datei einhältst.

Willst du in Zukunft keinen Artikel verpassen?
Dann trage hier deine E-Mailadresse ein und klicke auf "Abonnieren". Du erhältst regelmäßig aktuelle Infos über Contao und die Contao-Academy.

Du kannst deine E-Mail-Adresse jederzeit mit nur einem Mausklick aus unserem System löschen. Der Newsletter Versand sowie die individuelle Messung, Speicherung und Auswertung von Öffnungsraten und der Klickraten in Empfängerprofilen erfolgen durch KlickTipp. Ausführliche Hinweise erhältst du in unserer Datenschutzerklärung.

Über den Autor

Christian Feneberg ist der Gründer der Contao Academy und erstellt seit 2010 Websites mit Contao. Zudem gehört er zum Team von trakked.io. Abseits von Contao verbringt er gerne Zeit mit seiner Familie und widmet sich der Persönlichkeitsentwicklung.

Folge Christian jetzt bei LinkedIn.

5 Kommentare

Burkhard |

Ich habe folgendes in Contao 4.9 unter /contao/dca/tl_member.php
erstellt mit dem Ziel das der Mitglieder Login nicht mehr Case sensitive sein soll bezüglich des Usernames. Auch nach dem leeren des Prod Caches zeigt das keine Wirkung. Geht das so in 4.9 nicht mehr oder ist der Pfad evtl. doch falsch?

<?php
$GLOBALS['TL_DCA']['tl_member']['fields']['username']['sql'] = 'varchar(64) COLLATE utf8_general_ci NULL';

Antwort von Maren Lange

Ich habe es gerade einmal getestet. Das funktioniert weiterhin.

Du musst allerdings in dem Fall auch das Installtool aufrufen, damit die Änderung in der Datenbank greift.

Außerdem solltest Du Dir bewusst sein, dass Du damit auch die Sicherheit Deines System verschlechterst.

Michael |

Hi, danke Christian für die schöne Übersicht und zonky für die vielen DCA Beispiele!

Ich komme gerade vom Updateprozess von einer 2.11er zu 3.5.40, halte mich hier nur kurz auf und reise weiter zur neuen Contao 4.9 LTE.

Nun hatte ich im 2er für die Events ein neues Feld erstellt per Mini-Modul (mit Ordner dca und language).

Ist der Weg über contao/dca und contao/language nun best practice und sollte ich mein Modul in diese zentralen Ordner umziehen? Das xlf ist mir neu, muss ich aber anscheinend nur verwenden, wenn ich etwas im Core übersetzen möchte.

Christian Feneberg Antwort von Christian Feneberg

Hallo Michael,

grundsätzlich kannst du dein kleines Mini-Modul unter /system/modules auch unter Contao 4 nutzen.

Wenn es sich wirklich nur um DC-Erweiterungen ohne weitere Programmierlogik handelt, würde ich die Anpassungen tatsächlich in die neue Ordnerstruktur einfügen. Das ist in der Tat Best-Practice.

Von der Funktion sollte es allerdings unter Contao 4 kein Problem machen.

Florian |

Ich mache grad das Update von Contao 3 auf 4 (4.8). Allerdings existiert bei mir der Ordner "contao" nicht, wo dann die Einstellungen aus dcaconfing und langconfig rein sollen. Was tun? Einfach den "contao"-Ordner erstellen?

Christian Feneberg Antwort von Christian Feneberg

Ja, der Ordner muss immer manuell angelegt werden, wenn er benötigt wird.

Andre |

Hey Christian,
vielen Dank für die Anleitung. Hast du eine Idee wie sich jetzt der Titel-Zusatz " (Kopie) " beim kopieren eines z.B. Artikels ausschalten lässt?

GLOBALS['TL_LANG']['MSC']['copyOf'] = '%s';

Funktioniert scheinbar hier nicht mehr.

Gruß
André

Antwort von Maren Lange

Doch das funktioniert noch. Ich habe es gerade getestet. Bei Dir fehlt im Code ein Dollarzeichen. Korrekter Code:

$GLOBALS['TL_LANG']['MSC']['copyOf'] = '%s';

Je nach dem welche Contaoversion Du im Einsatz hast, gehört der Code in die Datei /contao/languages/de/default.php (ab Contao 4.8) oder /app/Resources/contao/languages/de/default.php (bis contao 4.7).

Unabhängig davon sollte wie im Artikel erwähnt auch die alte Anpassung der Sprachdatei in der langconfig.php funktionieren.

Nicht vergessen nach einer Änderung den Symfony-Cache zu leeren (über den Contao-Manager oder die Konsole).

zonky |

unter http://www.e-spin.de/dcaconfig-editor.html hatte ich mal verschiedene Änderungsoptionen zusammen gestellt...

... eigentlich schade, dass man das nicht mehr in einer Datei abfrühstücken kann :(

Einen Kommentar schreiben

Bitte rechnen Sie 9 plus 5.