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');
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
$watchField | string | - | Feld, dessen Live-Wert die Bedingung steuert |
$operator | string | - | Symbol (=, !=, >, >=, <, <=) oder Code (eq, neq, gt, gte, lt, lte, contains, starts, ends) |
$value | string | - | Wert, mit dem $watchField verglichen wird |
$targetField | string | - | Feld, auf das der Effekt angewendet wird |
$effect | string | - | 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');
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
$fields | string|array | - | Feld(er), auf die die Aktion angewendet wird |
$condition | string | - | Einfacher Vergleich oder ein {{sql}}-Ausdruck |
$action | string | 'hide' | 'hide' (LIST-Ansicht) oder 'disable' (Bearbeitungsformular) |
$content | ?string | null | Nur 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.