/

Pulsanti di Riga Personalizzati

Aggiungi un pulsante di azione per riga - conferme, condizioni dal vivo, e una finestra modale di prompt che raccoglie input, tutto tramite ->button().

Aggiungere un pulsante

->button($label, $functionName, $options = []) aggiunge un pulsante di azione personalizzato accanto ai pulsanti integrati Edit/Remove di ogni riga. $functionName è una funzione lato server (di solito in functions.php) che riceve la chiave primaria e i dati della riga:

$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;
}

Più chiamate a ->button() si accumulano - un pulsante per chiamata, allo stesso modo di ->disable_logic()/->hide_logic().

Opzioni

OpzioneCosa fa
iconUna stringa di classe icona, es. 'fa fa-check'.
confirmUn messaggio di conferma (window.confirm) mostrato prima che l'azione venga eseguita. Da omettere per nessuna conferma. Ignorato ogni volta che prompt è impostato - il pulsante OK della finestra modale di prompt è già di per sé la conferma.
condition / condition_modeUn'espressione "campo OP valore" (es. 'amount<1000') valutata rispetto ai dati propri della riga, rivalutata dal vivo lato client nell'istante in cui un campo referenziato viene modificato in linea. condition_mode è 'hide' (predefinito, rimuove il pulsante) oppure 'disable' (lo mantiene visibile ma disattivato in grigio).
disable_conditionUna seconda condizione indipendente, sempre in modalità disabilita indipendentemente da condition_mode - per "nascondi in base alla condizione A, ma anche disattiva in grigio in base alla condizione B" in un'unica chiamata.
pathCarica $functionName da un file diverso da functions.php.
beforeIl testo del pulsante nello stato inattivo. Predefinito: $label.
loadingMostrato per tutto il tempo in cui il click è in corso (stesso trattamento con spinner usato da Save/Delete). Predefinito: 'Processing…'.
afterMostrato brevemente non appena il click ha successo, prima di tornare a before. Da omettere per saltare questo stato e tornare immediatamente indietro.
formMostra questo pulsante anche nel piè di pagina del modulo di modifica, accanto a Save/Close. Disattivato per impostazione predefinita.
gridMostra questo pulsante nella cella/hover/menu a ellissi delle Azioni della griglia. Attivato per impostazione predefinita.
promptUn array di definizioni di campo - cliccando il pulsante si apre prima una piccola finestra modale, che raccoglie un valore per campo prima della chiamata al server. Riutilizza gli stessi controlli di campo usati dal vero modulo di modifica, incluso un menu a tendina relation con ricerca.

Finestre modali di prompt

Imposta prompt per raccogliere input prima che il gestore venga eseguito. Ogni voce richiede field, label e type (text/int/decimal/date/datetime/select/relation). Una voce relation accetta le stesse opzioni target_table/target_id/target_name/where/order_by/multi/search di ->relation() stessa:

$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;
}

Una funzione gestore che usa anche prompt riceve un 4° parametro, $promptValues - una semplice funzione a 3 parametri come il primo esempio sopra semplicemente non lo vede mai. $promptValues viene sempre passato (un array vuoto quando prompt non è mai stato impostato).

Posizione e stile della colonna Azioni

button_position($position) imposta su quale lato della griglia si trova la colonna Azioni - 'left' oppure 'right' (predefinito).

button_style($style, $showText = null) controlla come vengono visualizzate le azioni Edit/Remove/personalizzate per riga:

StileComportamento
'buttons' (predefinito)Sempre visibili, esattamente come prima.
'hover'Invisibile finché la riga non viene passata sopra con il mouse - appare in dissolvenza come popup flottante sotto la riga. Non raggiungibile su dispositivi touch privi di stato hover.
'reveal'La stessa dissolvenza attivata da hover di 'hover', ma i pulsanti vivono nel normale flusso del documento invece che in un popup flottante, così la riga non trabocca mai sulle righe adiacenti.
'ellipsis'Un unico pulsante "⋯" per riga apre un piccolo menu a tendina con le azioni come voci di menu.

Questa è puramente una scelta di visualizzazione - ->unset_edit()/->unset_remove() sono ciò che effettivamente rimuove un'azione; button_style() cambia solo il modo in cui vengono mostrate quelle rimaste. $showText per impostazione predefinita mostra l'etichetta testuale di ogni pulsante accanto alla propria icona; passa false per mostrare solo l'icona, con l'etichetta come tooltip al passaggio del mouse.

Conferma di eliminazione ed etichetta del pulsante Add

$xcrud->remove_confirm('Really delete this record?');
$xcrud->add_button_name('New Payment'); // renders as "+ New Payment"

remove_confirm($message = true) controlla la finestra di dialogo di conferma mostrata prima di un'eliminazione: true (predefinito) conferma con il messaggio standard, false elimina immediatamente senza alcuna conferma, e una stringa conferma mostrando quel messaggio esatto al suo posto.