/

Bedingte Anzeigen-/Ausblenden-/Deaktivieren-Logik

Vier verwandte Methoden reagieren auf den Wert eines Felds - zwei sind reine clientseitige Formular-UX, zwei sind grid-basiert und serverseitig durchgesetzt.

condition() - Live-Formular-UX

->condition($watchField, $operator, $value, $targetField, $effect) zeigt, verbirgt, aktiviert oder deaktiviert $targetField basierend auf dem AKTUELLEN Wert von $watchField im GEÖFFNETEN FORMULAR, live neu geprüft, während der Besucher tippt/auswählt.

$xcrud->condition('status', 'eq', 'inactive', 'reason', 'show');
ParameterTypStandardBeschreibung
$watchFieldstring-Feld, dessen Live-Wert die Bedingung steuert
$operatorstring-Symbol (=, !=, >, >=, <, <=) oder Code (eq, neq, gt, gte, lt, lte, contains, starts, ends)
$valuestring-Wert, mit dem $watchField verglichen wird
$targetFieldstring-Feld, auf das der Effekt angewendet wird
$effectstring-show, hide, enable oder disable

Rein eine clientseitige UX-Annehmlichkeit: Die API weiß nichts von diesen Regeln, daher ist ein deaktiviertes/verstecktes Zielfeld dadurch nicht davor geschützt, auf anderem Weg trotzdem übermittelt zu werden.

disable_logic() - serverseitig ausgewertet, nur Bearbeitungsformular

->disable_logic($fields, $condition) deaktiviert Feld(er) im BEARBEITUNGSFORMULAR, wenn $condition für die aktuell bearbeitete Zeile wahr ergibt. $condition ist entweder ein einfacher, in PHP ausgewerteter Vergleich der Form "field OP value", oder ein {{...}}-Rohtext-SQL-Fragment für alles, was ein einfacher Vergleich nicht ausdrücken kann.

$xcrud->disable_logic('total', 'total>1000');
$xcrud->disable_logic(['total', 'checkNo'], '{{IN (SELECT amount FROM payments LIMIT 1)}}');

Gilt nie für einen brandneuen Datensatz (das Add-Formular) - dort gibt es noch keine Zeile, gegen die eine Bedingung ausgewertet werden könnte.

hide_logic() - serverseitig ausgewertet, nur LIST-Ansicht

->hide_logic($fields, $condition) verwendet dieselbe Bedingungsgrammatik wie disable_logic(), aber für die LIST-Ansicht: Immer wenn $condition für eine Zeile wahr ergibt, wird der Wert dieser Zeile für $fields rundweg geleert (null), bevor die Antwort überhaupt erstellt wird. Das ist ein echtes, serverseitiges Verbergen - nichts Sensibles reist im JSON mit, das ein Besucher aus den Devtools auslesen könnte, im Unterschied zu einem Wert, der lediglich clientseitig gestylt/versteckt ist.

$xcrud->hide_logic('total', '{{IN (SELECT amount FROM payments LIMIT 1)}}');

logic() - die vereinheitlichte Obermenge

->logic($fields, $condition, $action = 'hide', $content = null) ist ein einziger, allgemeinerer Einstiegspunkt über disable_logic()/hide_logic(), der über $action auswählt, welches Verhalten gilt. Anders als ein bloßes hide_logic()-Leeren kann 'hide' individuelles HTML anstelle der geleerten Zelle einsetzen.

$xcrud->logic('paymentDate', 'amount>50000', 'hide', '<span class="text-red-600 font-bold">High Value</span>');
$xcrud->logic('checkNumber', 'amount>50000', 'disable');
ParameterTypStandardBeschreibung
$fieldsstring|array-Feld(er), auf die die Aktion angewendet wird
$conditionstring-Einfacher Vergleich oder ein {{sql}}-Ausdruck
$actionstring'hide''hide' (LIST-Ansicht) oder 'disable' (Bearbeitungsformular)
$content?stringnullNur von 'hide' verwendet: HTML, das anstelle einer leeren Zelle angezeigt wird

Die entscheidende Unterscheidung

condition() ist reine Formular-UX auf Client-Seite - sie ändert, was im geöffneten Formular für eine angenehmere Erfahrung sichtbar/aktiviert ist, erzwingt aber nichts. hide_logic()/logic('hide', ...) gelten für die LIST-Ansicht und werden tatsächlich serverseitig durchgesetzt - der Wert erreicht den Client bei zutreffender Bedingung überhaupt nicht. Greifen Sie zu condition(), um die Dateneingabe zu lenken; greifen Sie zu hide_logic()/logic(), wenn ein Wert für bestimmte Zeilen den Server tatsächlich nicht verlassen darf.