Individuelle Zeilen-Buttons
Eine Aktionsschaltfläche pro Zeile hinzufügen - Bestätigungen, Live-Bedingungen und ein eingabesammelndes Prompt-Modal, alles über ->button().
Einen Button hinzufügen
->button($label, $functionName, $options = []) fügt neben den eingebauten Bearbeiten-/Entfernen-Buttons jeder Zeile eine individuelle Aktionsschaltfläche hinzu. $functionName ist eine serverseitige Funktion (üblicherweise in functions.php), die den Primärschlüssel und die Daten der Zeile erhält:
$xcrud->button('Process', 'orderdetails_process_line', [
'icon' => 'fa fa-cogs',
'confirm' => 'Process this order line?',
'before' => 'Process',
'loading' => 'Processing…',
'after' => 'Processed ✓',
]);
function orderdetails_process_line(mixed $id, array $row, Xcrud $xcrud): string|bool|null
{
// Do the work here. Return false or a non-empty string to fail/block
// (the string is shown as the error message). Anything else (true,
// null, no return) means it succeeded.
return true;
}
Mehrere ->button()-Aufrufe summieren sich - ein Button pro Aufruf, genau wie bei ->disable_logic()/->hide_logic().
Optionen
| Option | Was sie bewirkt |
|---|---|
icon | Ein Icon-Klassen-String, z. B. 'fa fa-check'. |
confirm | Eine Bestätigungsmeldung (window.confirm), die vor dem Auslösen der Aktion angezeigt wird. Weglassen für keine Bestätigung. Wird ignoriert, sobald prompt gesetzt ist - die eigene OK-Schaltfläche des Prompt-Modals dient dann bereits als Bestätigung. |
condition / condition_mode | Ein Ausdruck der Form "Feld OP Wert" (z. B. 'amount<1000'), ausgewertet gegen die eigenen Daten der Zeile, live clientseitig neu ausgewertet, sobald ein referenziertes Feld per Inline-Bearbeitung geändert wird. condition_mode ist 'hide' (Standard, entfernt den Button) oder 'disable' (bleibt sichtbar, aber ausgegraut). |
disable_condition | Eine zweite, unabhängige Bedingung, immer im Disable-Modus, unabhängig von condition_mode - für "unter Bedingung A ausblenden, aber unter Bedingung B zusätzlich ausgrauen" in einem Aufruf. |
path | Lädt $functionName aus einer anderen Datei als functions.php. |
before | Der Text des Buttons im Ruhezustand. Standardmäßig $label. |
loading | Wird die ganze Zeit angezeigt, während der Klick unterwegs ist (dieselbe Spinner-Behandlung wie bei Speichern/Löschen). Standardmäßig 'Processing…'. |
after | Wird kurz angezeigt, sobald der Klick erfolgreich war, bevor wieder zu before zurückgekehrt wird. Weglassen, um diesen Schritt zu überspringen und sofort zurückzukehren. |
form | Zeigt diesen Button zusätzlich in der Fußzeile des Bearbeiten-Formulars, neben Speichern/Schließen. Standardmäßig aus. |
grid | Zeigt diesen Button in der Aktionen-Zelle/beim Hover/im Ellipsis-Menü des Grids. Standardmäßig an. |
prompt | Ein Array von Feld-Definitionen - ein Klick auf den Button öffnet zunächst ein kleines Modal, das vor dem Server-Aufruf einen Wert pro Feld erfasst. Verwendet dieselben Feld-Steuerelemente wie das echte Bearbeiten-Formular, einschließlich eines durchsuchbaren relation-Dropdowns. |
Prompt-Modale
Setzen Sie prompt, um vor dem Ausführen des Handlers Eingaben zu sammeln. Jeder Eintrag benötigt field, label und type (text/int/decimal/date/datetime/select/relation). Ein relation-Eintrag nimmt dieselben Optionen target_table/target_id/target_name/where/order_by/multi/search, die auch ->relation() selbst annimmt:
$xcrud->button('Reassign', 'payments_reassign', [
'prompt' => [[
'field' => 'customerNumber', 'label' => 'New customer',
'type' => 'relation', 'target_table' => 'customers',
'target_id' => 'customerNumber',
'target_name' => ['customerName'], 'search' => true,
]],
]);
function payments_reassign(mixed $id, array $row, Xcrud $xcrud, array $promptValues): string|bool|null
{
// $promptValues['customerNumber'] is whatever the visitor picked.
return true;
}
Eine Handler-Funktion, die zusätzlich prompt verwendet, erhält einen vierten Parameter, $promptValues - eine einfache 3-Parameter-Funktion wie im ersten Beispiel oben bekommt ihn schlicht nie zu sehen. $promptValues wird immer übergeben (ein leeres Array, wenn prompt nie gesetzt wurde).
Platzierung und Stil der Aktionen-Spalte
button_position($position) legt fest, auf welcher Seite des Grids die Aktionen-Spalte sitzt - 'left' oder 'right' (Standard).
button_style($style, $showText = null) steuert, wie die Bearbeiten-/Entfernen-/individuellen Aktionen pro Zeile dargestellt werden:
| Stil | Verhalten |
|---|---|
'buttons' (Standard) | Immer sichtbar, genau wie bisher. |
'hover' | Unsichtbar, bis die Zeile mit der Maus überfahren wird - blendet sich als schwebendes Popup unter der Zeile ein. Auf Touch-Geräten ohne Hover-Zustand nicht erreichbar. |
'reveal' | Dasselbe Hover-ausgelöste Einblenden wie 'hover', aber die Buttons bleiben im normalen Dokumentfluss statt in einem schwebenden Popup, sodass die Zeile nie in benachbarte Zeilen hineinragt. |
'ellipsis' | Eine einzelne "⋯"-Schaltfläche pro Zeile öffnet ein kleines Dropdown mit den Aktionen als Menüeinträgen. |
Dies ist rein eine Darstellungsentscheidung - ->unset_edit()/->unset_remove() sind es, die eine Aktion tatsächlich entfernen; button_style() ändert nur, wie die verbleibenden angezeigt werden. $showText zeigt standardmäßig den Textlabel jedes Buttons neben seinem Icon; übergeben Sie false, um nur das Icon zu zeigen, mit dem Label als Hover-Tooltip.
Löschbestätigung und die Beschriftung des Hinzufügen-Buttons
$xcrud->remove_confirm('Really delete this record?');
$xcrud->add_button_name('New Payment'); // renders as "+ New Payment"
remove_confirm($message = true) steuert den vor dem Löschen angezeigten Bestätigungsdialog: true (Standard) bestätigt mit der Standardmeldung, false löscht sofort ohne Bestätigung, und ein String bestätigt mit genau dieser eigenen Meldung.