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.