Eingabemaske: automatische Wertevorgaben

Die Eingabefelder der Eingabemasken können mit Standardwerten automatisch vorbelegt werden. Damit kann das Ausfüllen der Eingabemasken erleichtert werden, wenn ein Datensatz neu angelegt wird.

Über den BuildDataDefinitionEvent des DCG kann der Deafultwert gesetzt werden - folgend ein Beispiel für einen entsprechenden EventListener um bei dem Model mm_employees das Attribut name mit „Moin“ vorzubelegen.

 1<?php
 2// src/EventListener/SetDefaultValueListener.php
 3namespace App\EventListener;
 4
 5use ContaoCommunityAlliance\DcGeneral\DataDefinition\Palette\PaletteInterface;
 6use ContaoCommunityAlliance\DcGeneral\Factory\Event\BuildDataDefinitionEvent;
 7
 8class SetDefaultValueListener
 9{
10    public function __invoke(BuildDataDefinitionEvent $event): void
11    {
12        // Get container.
13        $container = $event->getContainer();
14        // Check right table present.
15        if ('mm_employees' !== $container->getName()) {
16            return;
17        }
18        // Set default value.
19        $container->getPropertiesDefinition()->getProperty('name')->setDefaultValue('Moin');
20    }
21}
1services:
2# src/Resources/config/services.yml
3  App\EventListener\SetDefaultValueListener:
4    public: true
5    tags:
6      - { name: kernel.event_listener, event: dc-general.factory.build-data-definition }

Vorgaben mit Legacy-Code

Bemerkung

Die Vorgaben mit dem Legacy-Code sollten nicht mehr verwendet werden. Ab MM 2.3 muss für eine korrekte Ausgabe des Labels bei dem Feld zusätzlich ein Eintrag mit Leerstring angelegt werden - z. B.
$GLOBALS['TL_DCA']['<MM-Table-Name>']['fields']['<Field-Column-Name>']['label'] = '';

Die Eingabefelder von MetaModels sind (fast) identisch den Feldern vom Contao-Core oder den üblichen Erweiterungen zu behandeln, die mit einem DCA-Array erstellt wurden. Unterschiede ergeben sich teilweise durch die dynamische Generierung der Felder in MetaModels durch den DC-General.

Die Vorgaben für die Felder können durch die Ergänzung des DC-Array mit dem Key „default“ erreicht werden - siehe Contao-Handbuch.

Für einen Eintrag einer Vorgabe muss der (interne) Name des MetaModel und der Spaltenname des Attributes bekannt sein. Diese Angaben können in einem Arrayeintrag mit der allgemeinen Form

1<?php
2// contao/dca/<MM-Table-Name>.php
3$GLOBALS['TL_DCA']['<MM-Table-Name>']['fields']['<Field-Column-Name>']['default'] = <Value>;

ergänzt werden.

Für ein das E-Mail-Feld ([text]) aus Das erste MetaModel könnte die Vorgabe wie folgt aussehen:

1<?php
2// contao/dca/mm_mitarbeiterliste.php
3$GLOBALS['TL_DCA']['mm_mitarbeiterliste']['fields']['email']['default'] = '@mmtest.com';

Für die einzelnen Attributarten gibt es spezifische Vorgaben, in welcher Form die Werte erwartet werden:

  • Text: Text in Hochkomma z.B. @mmtest.com
    ...['default'] = '@mmtest.com';

  • Timestamp: Integer für den Timestamp z.B. 1463657005 oder PHP-Funktion time()
    ...['default'] = 1463657005; oder
    ...['default'] = time();

  • Einzelauswahl [Select]: Integer der ID des Wertes in Hochkomma
    ...['default'] = '2';

  • Mehrfachauswahl [Tags]: Array mit den Alias-Werten aus der eingestellten Alias-Spalte
    ...['default'] = ['einkauf', 'marketing'];

  • Kontrollkästchen (Checkbox): true
    ...['default'] = true;

Wie man an dem Attribut „Timestamp“ sieht, sind auch dynamische Vorgaben umsetzbar. So wäre es auch möglich, auf vorhandene Werte aus MetaModels zurück zu greifen und diese - ggf. mit einer Berechnung - als Standard auszugeben. Für einen Zugriff auf MetaModels stehen die Methoden der API (MetaModels Interfaces) zur Verfügung.