Anpassungen der dcaconfig und langconfig ab Contao 4
- 4.4
- 4.9
- 4.13
- 5.3
Mit der Umstellung von Contao 4 als Symfony-Applikation gibt es viele neue Möglichkeiten das System zu konfigurieren. Das gilt auch für die Konfigurationsdateien, die bisher unter /system/config abgelegt wurden.
Unter Contao 4 kannst du zwar weiterhin deine Anpassungen in dcaconfig.php, langconfig.php und config.php durchführen, doch spätestens mit Contao 5 wird dies nicht mehr möglich sein.
Es ist deswegen sinnvoll ab sofort den neuen Weg der DCA-Konfiguration zu nutzen.
DCA-Konfiguration anpassen
Im ersten Schritt erstellst du den Ordner /contao und hier einen neuen Unterordner mit dem Namen dca. Nun benötigst du für jede Tabelle eine eigene Datei. In diese kommen die Einstellungen aus der dcaconfig.php.
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']);
Unter 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.
Contao 4: /contao/dca/tl_content.php
<?php
/* HTML in Überschriften */
$GLOBALS['TL_DCA']['tl_content']['fields']['headline']['eval']['allowHtml'] = true;
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;
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)
Bezeichnungen 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 unter Contao 4 die PHP-Variante verwenden willst, kannst du den Eintrag einfach 1:1 übernehmen und in die default.php schreiben.
Contao 4: /contao/languages/de/default.php
<?php
//Weiterlesen News
$GLOBALS['TL_LANG']['MSC']['more'] = 'Mein neuer Weiterlesen-Text …';
Wie findest du die richtige Sprachdatei für Contao 4?
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 in der Zeile 2476.
Nun legen wir eine neue default.xlf an und übertragen die nötigen Zeilen. Wichtig ist, dass du den richtigen Aufbau der Datei einhältst.
/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>
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)
Über den Autor
Christian Feneberg ist der Gründer der Contao-Academy und erstellt seit 2010 Websites mit Contao. Außerdem ist er im Team von trakked.io. und regelmäßig auf YouTube in der Contao Show zu sehen. Neben Contao begeistert er sich für Online-Marketing, Unternehmertum und Persönlichkeitsentwicklung.
5 Kommentare
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 :(
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).
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?
Antwort von Christian Feneberg
Ja, der Ordner muss immer manuell angelegt werden, wenn er benötigt wird.
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.
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.
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.
Einen Kommentar schreiben