DCA-Konfiguration und Sprachdateien in Contao anpassen
- 4.4
- 4.9
- 4.13
- 5.3
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:
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 Newstl_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
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.
Beispiel: Text für den More-Link überschreiben
Unter Contao 3 wurden die Änderungen updatesicher in der Datei system/config/langconfig.php gespeichert.
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.
Ü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.
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?
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:
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