Guten Tag,
ich habe eine eigene Tabelle mit mehreren Feldern erstellt und möchte, dass wenn ein bestimmte Select-Feld ausgewählt wird, die anderen Felder einen bestimmten Standardwert erhalten. Im DCA habe ich für das Select-Feld submitOnChange auf true gesetzt und dann (je Feld) einen Callback erstellt. Hier ein Auszug aus dem Callback mit dem target fields.action.load:
PHP-Code:
class EventActionDefaultCallback
{
public function __invoke(string|null $currentValue, DataContainer|null $dc = null): string|null
{
if (null === $dc || '' !== ((string) $currentValue)) {
return $currentValue;
}
/** @var \stdClass|Result|null $record */
$record = $dc->activeRecord;
if(null === $record){
return '';
}
$category = '';
switch ($record->event) {
// ...
}
return $category;
}
}
Die Prüfung auf $currentValue nehme ich vor, damit die Werte beim Bearbeiten nicht wieder zurückgesetzt werden. Das führt aber leider dazu, dass der Wert nur bei der erstmaligen Auswahl meines Select-Feldes vorausgefüllt wird. Wenn ich dann ein anderen Select-Wert wähle, bleiben die alten Inhalte stehen.
Mein Problem ist dabei vor allem, dass ich nicht herausfinden kann, ob es sich um einen neuen Datensatz handelt oder nicht. Denn sobald ich in der Listen-Ansicht auf "Neu" klicke, wird bereits eine ID vergeben und "act" in der URL ist "edit. Insofern hilft mir die Prüfung auf die ID nicht weiter. Gibt es eine Möglichkeit, im Callback zu Unterscheiden, ob der Eintrag gerade erstmalig angelegt wird oder der bestehende Eintrag geändert wird bzw. kann ich verhindern, dass beim Anklicken von "Neu" auch ohne explizite Speicherung eine ID vergeben wird (ich vermute mal, dass das schon alleine aufgrund von submitOnChange gar nicht anders möglich ist)
Mein alternativer Ansatz wäre, den die Feld-Werte zu überschreiben, sobald sich der Wert des Select-Feldes ändert. Aber ist das mittels Callback möglich?
Lesezeichen