Defaultwerte vorbelegen

Aus Contao Community Documentation

Diese Anleitung beschreibt das Vorbelegen von Felder in Contao mit Defaultwerten. Zu Beginn sei erwähnt, dass Änderungen am Core vermieden werden sollte, da sonst das System nicht updatesicher bleibt. Deshalb:

  • Änderungen an Sprachdateien erfolgen in der system/config/langconfig.php
  • Änderungen an DCA-Einstellungen erfolgen in der system/config/dcaconfig.php

Warum das so außerhalb vom Core geht? Ganz einfach: Contao lädt einfach diese Dateien ganz am Schluss und dadurch ist es möglich, Daten zu überschreiben, bevor sie ausgegeben werden.

Aufgabe 1

Die Checkbox Artikel veröffentlichen beim Anlegen eines Artikels soll standardmäßig angehakt sein.

Zuerst muss man die Config-Datei suchen, in welcher diese Checkbox generiert wird. Das ist natürlich für Nicht-PHP-Kenner bei so vielen Dateien nicht einfach und man bedient sich eines Tricks. Zuerst benötigt man aber ein Programm, welches Dateien und Unterverzeichnisse nach Inhalt durchsuchen kann. Für diese Anleitung wird der Quellcode-Editor PSPad verwendet. Vorbereitend wird eine Contao-Installation von der Projekt-Webseite geladen und in ein Verzeichnis nach Wahl entpackt.

Da man keine Ahnung hat, in welcher Datei die Konfiguration erfolgt, sucht man einfach mal nach der Bezeichnung des Feldes Artikel veröffentlichen, denn auch das muss ja irgend woher kommen. Dazu öffnet man PSPad und klickt in der Menüleiste auf Suchen -> Suchen/Ersetzen in Dateien.... Im sich öffnenden Dialogfenster sind nun folgende Parameter zu setzen:

  • Gesuchter Text: Artikel veröffentlichen
  • In diesem Ordner suchen => Verzeichnis, wo Contao entpackt wurde
  • Einschließlich Unterordner: anhaken

PSPad Suchmaske Einstellungen

Mit einem Klick auf OK beginnt die Suche.
Wie in dem Dateisuchergebnis sichtbar ist, wurde der Ausdruck an zwei Stellen in einer Datei system/modules/backend/languages/de/tl_article.php gefunden.

PSPad Suchergebnis

Das Dateisuchergebnis zeigt sogleich die Zeile an, an welcher Stelle der gesuchte Ausdruck gefunden wurde, nämlich in Zeile 46 und 86. Da veröffentlichen auf englisch published heißt, sollte klar sein, dass die Zeile 46 relevant ist. Wie man nun sieht, wird in dieser Datei das Feld, je nach Sprache benannt. Jetzt weiss man aber, in welchem Array diese Beschriftung gespeichert wird, nämlich in

$GLOBALS['TL_LANG']['tl_article']['published']

Also wiederholt man die Suche in allen Dateien und sucht dieses Array, was wieder ein Ergebnis liefert. Diesmal sind es 3 Ergebnisse. Logischerweise findet man das Array in allen Sprachdateien (standardmäßig de und en, deshalb zwei) und in der gesuchten Config-Datei. Es handelt sich hier um system/modules/backend/dca/tl_article.php.

PSPad Suchergebnis

Diese Datei wird jetzt im Editor geöffnet.
Jetzt wird es ein bisschen komplizierter, obwohl die Darstellung ja sehr ordentlich ist. Vor sich hat man jetzt eine Datei mit lauter mehrdimensionalen Arrays. Wer genau wissen möchte, um was es sich dabei handelt, kann sich hier weiterbilden. An und für sich muss man sich das einfach wie ein Geschenk vorstellen, das in n Packungen eingepackt ist (verschachtelt). Das

$GLOBALS['TL_LANG']['tl_article']['published']

findet man so vor:

'published' => array
(
	'exclude'                 => true,
	'label'                   => &$GLOBALS['TL_LANG']['tl_article']['published'],
	'inputType'               => 'checkbox',
	'eval'                    => array('doNotCopy'=>true)
),

Jetzt verfolgt man die Verschachtelung zurück. Wenn man all das weg lässt, was nicht interessiert (= die Schachteln auf der gleichen Ebene), bleibt am Schluss das übrig:

$GLOBALS['TL_DCA']['tl_article'] = array
(
	// Fields
	'fields' => array
	(
		'published' => array
		(
			'exclude'                 => true,
			'label'                   => &$GLOBALS['TL_LANG']['tl_article']['published'],
			'inputType'               => 'checkbox',
			'eval'                    => array('doNotCopy'=>true)
		),
	)
);

Entweder man sieht das gleich, oder man löscht einfach alles, was nicht interessiert aus der Datei (Achtung, nicht speichern danach).

Nun kann man also alle Schachteln zusammenfassen:

$GLOBALS['TL_DCA']['tl_article']['fields']['published']

Genau hier wird dieses Feld generiert und man kann es jetzt in der system/config/dcaconfig.php vor belegen, indem man dort einfach folgenden Code eingibt:

$GLOBALS['TL_DCA']['tl_article']['fields']['published']['default'] = true;

Wie zu sehen ist, hängt man einfach dieser Verschachtelung noch ein 'default' an und setzt den Wert auf 'wahr', da eine Checkbox entweder angehakt ist (true) oder eben nicht (false).

Das war's. Von nun an ist die Checkbox standardmäßig angehakt. Es ist noch zu beachten, dass das natürlich keine Auswirkungen auf bereits erstellte Artikel hat, denn bei denen wurde der Status ja schon in die Datenbank eingetragen.

Aufgabe 2

Natürlich gibt es nicht nur Checkboxen. Man könnte z.B. auch die Bildergröße (150 x 100 Pixel) bei einem Bild vorbelegen. Das sähe dann so aus:

$GLOBALS['TL_DCA']['tl_content']['fields']['size']['default'] = array(150,100);

Weitere Beispiele

Events

Hier sind ein paar Beispiele für Defaultwerte beim Anlegen eines 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

Überschriften

mögliche Überschriften-Tags einschränken auf zum Beispiel nur h2 und h3

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

Credits

Orginalanleitung erstellt von Toflar

Ansichten
Meine Werkzeuge

Contao Community Documentation

Nein, der Hangout ist noch nicht vorbei, wir schweigen nur. Es heisst ja auch hangout und nicht bryll out.

Christian Schiffler
Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge