Contao dcaconfig-editor

Einsatz

Der dcaconfig-editor ist für alle, die die Konfigurationsdatei dcaconfig.php direkt aus dem Backend anpassen wollen und nicht den Weg über z.B. einen "FTP-Download-Edit-Upload" gehen wollen.

Der dcaconfig-editor ist aufgrund seines sensiblen Umfeldes nur für Administratoren frei gegeben.

Mit dem dcaconfig-editor wird die Datei dcaconfig.php im Ordner /sytem/config wie mit jedem anderen lokalen Editor verändert.

Die unten stehenden Beispiele per "Copy&Paste" in den Editor übertragen.

DCA config Editor
Screenshot BE

Installation

Der dcaconfig-editor kann über das "Extension Repository" (ER) installiert werden - in der Erweiterungsverwaltung "e-spin_dcaconfig-editor" eingeben und den Anweisungen folgen.

Anschließend ist unter System der Menüpunkt "DCA Config Editor" zu sehen. Der Menüpunkt ist aus Sicherheitsgründen nur für die Benutzer mit Admin-Status erreichbar.

Alternativ kann das Erweiterungspaket manuell per FTP in Contao auf dem üblichen Weg installiert werden. Die aktuellen Resourcen sind bei Github unter https://github.com/e-spin/contao_dcaconfig-editor zu finden.

Wenn was schief geht...

... die Datei /system/config/dcaconfig.php lokal editieren.

Contao 4

Unter Contao 4 kann man die Datei /system/config/dcaconfig.php kopieren - sofern schon vorhanden - oder neu erstellen. Die Arbeit unter /systems/config/... ist "deprecated" - also wird spätestens in Contao 5 abgeschaltet.

Alternativ kann man die Änderungen in /app/Resources/contao/dca/ ablegen, man muss aber die Anpassungen in die dafür zuständigen Dateien einarbeiten. Zum Beispiel

$GLOBALS['TL_DCA']['tl_content']['fields']['headline']['options']= array ('h2', 'h3');

muss in die datei tl_content.php.

Beispiele

Folgend einige Beispiele für die Anpassungen von Contao über die dcaconfig. Informationen über den Aufbau und mögliche Einstellungen sind im Contao-Handbuch > DCA zu finden.

Für eigene Ideen oder Fragen, bitte die Kommentarfunktion nutzen oder eine E-Mail an contao@e-spin.de

... alle Beispiele lassen sich natürlich auch "konventionell" in die dcaconfig einfügen ;-)

Achtung! bitte das "<?php ... ?> in der Datei nicht löschen!

HTML-Tags in Überschriften u.a. Feldern

# ermöglicht die Eingabe von HTML-Code in Titel
# preserveTags: _alle_ HTML-Tags vs. 
# allowHtml: die in Systemsteuerung erlaubten HTML-Tags
// Contentelemente
$GLOBALS['TL_DCA']['tl_content']['fields']['headline']['eval']['allowHtml'] = true;
// Module
$GLOBALS['TL_DCA']['tl_module']['fields']['headline']['eval']['allowHtml'] = true;
// News
$GLOBALS['TL_DCA']['tl_news']['fields']['headline']['eval']['preserveTags'] = true;
// Bildunterschriften
$GLOBALS['TL_DCA']['tl_content']['fields']['caption']['eval']['allowHtml'] = true;
// Seitenname (auch für Navigation)
$GLOBALS['TL_DCA']['tl_page']['fields']['title']['eval']['allowHtml'] = true;
// Seitentitel
$GLOBALS['TL_DCA']['tl_page']['fields']['pageTitle']['eval']['allowHtml'] = true;
// in Feld-Beschriftungen
$GLOBALS['TL_DCA']['tl_form_field']['fields']['label']['eval']['allowHtml'] = true;

h-Tag in Überschriften einschränken

# h-Tag in Überschriften einschränken - z.B. h2 und h3
$GLOBALS['TL_DCA']['tl_content']['fields']['headline']['options']= array ('h2', 'h3');

# Im Inhaltselement Text die Überschrift per Standard auf H2 - aber nur bei News
if (Input::get('do') == 'news')
{
  $GLOBALS['TL_DCA']['tl_content']['fields']['headline']['default'] = array('unit' => 'h2', 'value' => '');
}

HTML-Tags in Übersetzungs-Feld von Isotope

# Einstellungen für Isotope
# HTML in Übersetzungs-Feld
$GLOBALS['TL_DCA']['tl_iso_labels']['fields']['replacement']['eval']['allowHtml'] = true;
$GLOBALS['TL_DCA']['tl_iso_labels']['fields']['replacement']['eval']['decodeEntities'] = true;

IDs der Seiten-/Artikel-Baum anzeigen

# Anzeige IDs in BE-Tree
# Seiten-ID anzeigen p = page
$GLOBALS['TL_DCA']['tl_page']['list']['label']['fields'][] = 'id';
$GLOBALS['TL_DCA']['tl_page']['list']['label']['format'] = '%s <span style="font-weight:normal; padding-left: 3px;">(IDp: %s)</span>';

# Artikel-ID anzeigen a = article
$GLOBALS['TL_DCA']['tl_article']['list']['label']['fields'][] = 'id'; 
$GLOBALS['TL_DCA']['tl_article']['list']['label']['format'] = '%s <span style="font-weight:normal; padding-left: 3px;">(%s, IDa: %s)</span>';

IDs der Module anzeigen

# Anzeige IDs in BE-Listing
# ab Contao 3.2.0 - siehe https://docs.contao.org/books/api/dca/callbacks.html
$GLOBALS['TL_DCA']['tl_module']['list']['sorting']['child_record_callback'] = function($row) 
    { 
        return '<div style="float:left;">'. $row['name'] .' <span style="color:#b3b3b3; padding-left:3px;">[' .$GLOBALS['TL_LANG']['FMD'][$row['type']][0] .'] (IDm:' .$row['id']. ")</span></div>\n"; 
    };

Werte beim Duplizieren übernehmen / ausschließen

# Autor beim Duplizieren eines Artikels mit kopieren
$GLOBALS['TL_DCA']['tl_article']['fields']['author']['eval']['doNotCopy'] = false;
# Veröffentlicht beim Duplizieren eines Artikels mit kopieren
$GLOBALS['TL_DCA']['tl_article']['fields']['published']['eval']['doNotCopy'] = false;
# Veröffentlicht beim Duplizieren einer Seite mit kopieren
$GLOBALS['TL_DCA']['tl_page']['fields']['published']['eval']['doNotCopy'] = false;

# abschalten von "(Kopie)" beim Duplizieren
$GLOBALS['TL_LANG']['MSC']['copyOf'] = '%s';

Werte Vorbelegen: Artikel und Seite

# Werte Vorbelegen: Artikel und Seite
// Veröffentlich bei Artikel "ja"
$GLOBALS['TL_DCA']['tl_article']['fields']['published']['default'] = true;
// Bildergröße (150 x 100 Pixel) bei einem Bild vorbelegen
$GLOBALS['TL_DCA']['tl_content']['fields']['size']['default'] = array(150,100);

// Veröffentlich bei Seite "ja"
$GLOBALS['TL_DCA']['tl_page']['fields']['published']['default'] = true;

Werte Vorbelegen: Events

# Werte Vorbelegen: Events
$GLOBALS['TL_DCA']['tl_calendar_events']['fields']['details']['default'] = '<p>Event Text<br />
als Absatz und mit Zeilenumbruch.</p>';
 
$GLOBALS['TL_DCA']['tl_calendar_events']['fields']['alt']['default'] = 'Alternativer Text'; # Alternativer Text bei Bildern
$GLOBALS['TL_DCA']['tl_calendar_events']['fields']['size']['default'] = array(150,); # Bildbreite von 150 px
$GLOBALS['TL_DCA']['tl_calendar_events']['fields']['fullsize']['default'] = true; # Großansicht/Neues Fenster
$GLOBALS['TL_DCA']['tl_calendar_events']['fields']['floating']['default'] = array('left'); # Bildausrichtung links

Verwendung von Elementen nur für Admins, Gruppen, User

# Verwendung von Elementen nur für Admins
// z.B. nur Administratoren dürfen Include-Elemente verwenden
// für alle anderen wird der Punkt entfernt
if (!BackendUser::getInstance()->isAdmin)
{
    unset($GLOBALS['TL_CTE']['includes']);
}

# Verwendung von Elementen nur für Benutzer/User der Gruppe "3"
if (!BackendUser::getInstance()->isMemberOf(3))
{
    unset($GLOBALS['TL_CTE']['includes']);
}

# Verwendung von Elementen nur für Benutzer/User mit ID "7"
if (BackendUser::getInstance()->id != 7)
{
    unset($GLOBALS['TL_CTE']['includes']);
}

Formular Daten speichern abschalten (nur noch per EFG)

# Formular Daten speichern abschalten (nur noch per EFG)
unset($GLOBALS['TL_DCA']['tl_form']['fields']['storeValues']);
unset($GLOBALS['TL_DCA']['tl_form']['fields']['targetTable']);

Formularfelder im EFG: Textareas mit TinyMCE

# HTML Bearbeitung im BE ermöglichen

// Möglichkeit 1: bindet den TinyMCE auch im BE in die entsprechende Textarea ein
$GLOBALS['TL_DCA']['tl_formdata']['fields']['FELDNAME_DES_TEXTAREAS']['eval']['rte'] = 'tinyMCE';

// Möglichkeit 2: Erlaubt die HTML-Bearbeitung bzw. Speicherung
$GLOBALS['TL_DCA']['tl_form_field']['fields']['FELDNAME_DES_TEXTAREAS']['eval']['allowHtml'] = true;

Evaluation von Feldern anpassen

# Evaluation  von Feldern anpassen - hier bei Mitgliedern
# siehe https://contao.org/de/manual/3.2/data-container-arrays.html#evaluation

// Firma zu einem Pflichtfeld in der Mitgliedertabelle machen
$GLOBALS['TL_DCA']['tl_member']['fields']['company']['eval']['mandatory'] = true;
 
// Firmennamen dürfen nur alphanumerische Zeichen beinhalten
$GLOBALS['TL_DCA']['tl_member']['fields']['company']['eval']['rgxp'] = 'alnum';

// Maximale Anzahl von Feldeingaben - z.B. max. 50 Zeichen
$GLOBALS['TL_DCA']['tl_member']['fields']['company']['eval']['maxlength'] = 50;

eigene RTE-Konfiguration (TinyMCE) für Text-Elemente

# eigene RTE-Konfiguration (TinyMCE) für Text-Elemente verwenden
# tinyCustom.php vorher anlegen
# https://contao.org/de/manual/3.2/customizing-contao.html#tinymce-anpassen

// Artikel-Teaser
$GLOBALS['TL_DCA']['tl_article']['fields']['teaser']['eval']['rte'] = 'tinyCustom';
// Text-Elemente 
$GLOBALS['TL_DCA']['tl_content']['fields']['text']['eval']['rte'] = 'tinyCustom';
// Events-Details 
$GLOBALS['TL_DCA']['tl_calendar_events']['fields']['details']['eval']['rte'] = 'tinyCustom';
// Kommentare 
$GLOBALS['TL_DCA']['tl_comments']['fields']['comment']['eval']['rte'] = 'tinyCustom';
// FAQs 
$GLOBALS['TL_DCA']['tl_faq']['fields']['answer']['eval']['rte'] = 'tinyCustom';
// Formulare 
$GLOBALS['TL_DCA']['tl_form_field']['fields']['text']['eval']['rte'] = 'tinyCustom';
// News 
$GLOBALS['TL_DCA']['tl_news']['fields']['text']['eval']['rte'] = 'tinyCustom';
// Content-Boxes
$GLOBALS['TL_DCA']['tl_boxes']['fields']['content']['eval']['rte'] = 'tinyCustom';

// Alternativ für _alle_ RTE-Felder mit tinyMCE
array_walk_recursive($GLOBALS['TL_DCA'], function(&$v, $k){
  if($k === 'rte' && $v === 'tinyMCE')
  {
    $v = 'tinyCustom';
  }
});

Sortierung Auf-/Absteigend umstellen

# Sortierung der Mitglieder nach "Letzte Anmeldung" Absteigend (DESC)
# GET-Parameter "sort=desc" in URL anfügen z.B.
# ..contao/main.php?do=member&ref=19b0c063&sort=desc
# Flag: 5 = Absteigend, 6 = Aufsteigend
# siehe https://docs.contao.org/books/api/dca/reference.html#sorting
# ggf. Sortierung einmal umstellen oder Session-Daten löschen

if (Input::get('do') == 'member' && Input::get('sort') == 'desc')
{
  $GLOBALS['TL_DCA']['tl_member']['fields']['currentLogin']['flag'] = 5;
}

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

# Sortierung bei Nachrichten/News umdrehen
$GLOBALS['TL_DCA']['tl_news']['list']['sorting']['fields'] = array('date ASC');

Bildabstände px als Vorauswahl

# Bildabstände px als Vorauswahl
$GLOBALS['TL_DCA']['tl_content']['fields']['imagemargin']['default'] = serialize(['unit' => 'px']);