[2836 Aufrufe]

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.