3.4 Der Abschnitt: Palettes und Subpalettes
Da die Abschnitte der Paletten und der Subpaletten nicht so umfangreich sind, fasse ich sie in einem Beitrag zusammen.
Beispielkonfiguration
<?php
$GLOBALS['TL_DCA']['tl_testtable'] = [
// Config ...
// List ...
'palettes' => [
'__selector__' => [''],
'default' => '{title_legend},title,description;'
],
'subpalettes' => [
'' => ''
],
// ...
];
Abschnitt: palettes
In der Regel gibt es eine Palette mit dem Namen default, dies ist die Standardpalette. Es kann aber mehrere Paletten
geben, so gibt es z.B. in tl_content in Contao 4.13 insgesamt 18 Paletten. In den meisten einfachen Erweiterungen
wird man mit der Palette default auskommen.
In den einzelnen Paletten werden die Felder in Abschnitte gegliedert. Ein Abschnitt wird mit einem Bezeichner in
geschweiften Klammern eingeleitet (z. B. {title_legend}). Geschlossen wird der Abschnitt mit einem Semikolon. Die
Abschnitte enthalten die Namen der Felder, die durch Komma getrennt werden (title,description). Es ergibt
sich also z. B. ein solcher String für einen Abschnitt{title_legend},title,description;. Es kann beliebig
viele Abschnitte geben.
Die Übersetzung der Abschnitte steht in der Sprachdatei der Tabelle, wo auch die Felder übersetzt werden. Es wird aber einfach ein String, statt eines Arrays erwartet. Dies haben wir im Beitrag "Eine Togglefunktion für eine eigene Liste" schon gesehen.
Zusätzlich kann es noch den Eintrag __selector__ geben. Dieser enthält die Namen der Felder, die Subpaletten
einblenden. Die Felder müssen zusätzlich auch in den "normalen" Paletten enthalten sein. Die Subpaletten
werden direkt hinter dem Feld eingeblendet, das als "Schalter" fungiert.
Es kann vorkommen, dass Eure Einträge nicht angezeigt werden, wenn Ihr eine bestehende Pallette um Eure Felder erweitert. Dies kann daran liegen, dass die Palette nicht mit einem Semikolon geschlossen wurde. Stellt Ihr Eurem Eintrag ein Semikolon voran, klappt es in solchen Fällen meistens.
Abschnitt: subpalettes
Die Subpaletten enthalten ein Array. Als Schlüssel werden die Namen der Felder verwendet, die auch in palettes >
__selector__ eingetragen sind. Als Wert wird eine Liste der Felder angegeben, die eingeblendet werden sollen. Für
die Auszeichnung der Felder gelten die gleichen Regeln wie bei den Paletten.
Checkboxen als Selektor
Bei Checkboxen ist die Sache ganz einfach. Sie benötigen unter eval die Einstellung 'submitOnChange'=>true. Wird
dann der Haken gesetzt, werden die neuen Felder geladen.
Die Einstellungen der Felder besprechen wir im nächsten Beitrag.
<?php
$GLOBALS['TL_DCA']['tl_testtable'] = [
// Config ...
// List ...
'palettes' => [
'__selector__' => ['showMore'],
'default' => '{testfeld_legend},title,showMore;'
],
'subpalettes' => [
'showMore' => 'anotherFieldOne,anotherFieldTwo'
],
'fields' => [
'title' => [
'type' => 'text'
],
'showMore' => [
'type' => 'checkbox'
'eval' => ['submitOnChange'=>true]
],
'anotherFieldOne' => [
'type' => 'text'
],
'anotherFieldTwo' => [
'type' => 'text'
]
]
];
Die Definition der Felder ist verkürzt dargestellt, da wir die Einstellungen der Felder erst im nächsten Beitrag besprechen.
Wird in diesem Beispiel das Feld showMore angehakt, werden die Felder anotherFieldOne und anotherFieldTwo
eingeblendet. Das Feld showMore befindet sich in der Palette default, zusätzlich in der Spezialpalette
__selector__ und als Schlüssel in der Subpalette.
Auswahlfelder als Selector
Auch die Auswahlfelder benötigen unter eval den Eintrag 'submitOnChange'=>true. Bei diesen Feldern, haben wir aber
die Möglichkeit, pro Option andere Felder festzulegen. Dies wird konfiguriert, in dem man unter subpalettes als
Key den value der Option durch einen Unterstrich getrennt an den Namen des Felds anhängt. Haben wir ein Feld mit dem
Namen showMore und den Optionne option01 und option02, würden die Einträgt z. B. so aussehen:
<?php
$GLOBALS['TL_DCA']['tl_testtable'] = [
// Config ...
// List ...
'palettes' => [
'__selector__' => ['showMore'],
'default' => '{testfeld_legend},title,showMore;'
],
'subpalettes' => [
'showMore_option01' => 'anotherFieldOne,anotherFieldTwo',
'showMore_option02' => 'anotherFieldThree,anotherFieldFour'
],
'fields' => [
'title' => [
'type' => 'text'
],
'showMore' => [
'type' => 'select'
'ooptions' => ['option01', 'option02']
'eval' => ['submitOnChange'=>true]
],
'anotherFieldOne' => [
'type' => 'text'
],
'anotherFieldTwo' => [
'type' => 'text'
],
'anotherFieldThree' => [
'type' => 'text'
],
'anotherFieldFour' => [
'type' => 'text'
]
]
];
Auch hier ist die Definition der Felder wieder bewusst verkürzt dargestellt, da wir die Einstellungen der Felder erst im nächsten Beitrag besprechen.
Wird die Option option01 ausgewählt, werden die Felder anotherFieldOne und anotherFieldTwo eingeblendet, bei
option02 die Felder anotherFieldThree und anotherFieldFour. Was dies alles für Felder sind, spielt
erst einmal keine Rolle. Es geht hier nur um die Gruppierung der Felder. Alles Weitere sehen wir uns im nächsten
Beitrag an.