Anpassungen der dcaconfig und langconfig ab Contao 4

  • 4.4
  • 4.9
  • 4.12

Seit Contao 4 sollten Anpassungen und Erweiterungen der DCA-Konfiguration nicht mehr in der dcaconfig.php durchgeführt werden. Hier erfährst du das neue Prinzip der Konfigurationsdateien in Contao 4.

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 unter Contao 4 - Ordnerstruktur

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

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)

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 2274. Siehe hier unter Github.

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

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)

Hat dir dieser Artikel gefallen?

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.

Wir geben deine Daten niemals an Dritte weiter. 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 (Gründer Fenepedia)

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.

Folge Christian jetzt auf Twitter, Xing und LinkedIn.

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:

$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).

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.

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.

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

Was ist die Summe aus 8 und 9?