/

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

OptionWas sie bewirkt
iconEin Icon-Klassen-String, z. B. 'fa fa-check'.
confirmEine 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_modeEin 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_conditionEine 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.
pathLädt $functionName aus einer anderen Datei als functions.php.
beforeDer Text des Buttons im Ruhezustand. Standardmäßig $label.
loadingWird die ganze Zeit angezeigt, während der Klick unterwegs ist (dieselbe Spinner-Behandlung wie bei Speichern/Löschen). Standardmäßig 'Processing…'.
afterWird kurz angezeigt, sobald der Klick erfolgreich war, bevor wieder zu before zurückgekehrt wird. Weglassen, um diesen Schritt zu überspringen und sofort zurückzukehren.
formZeigt diesen Button zusätzlich in der Fußzeile des Bearbeiten-Formulars, neben Speichern/Schließen. Standardmäßig aus.
gridZeigt diesen Button in der Aktionen-Zelle/beim Hover/im Ellipsis-Menü des Grids. Standardmäßig an.
promptEin 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:

StilVerhalten
'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.