/

Boutons de ligne personnalisés

Ajoutez un bouton d'action par ligne - confirmations, conditions en direct, et une fenêtre modale de saisie, le tout via ->button().

Ajouter un bouton

->button($label, $functionName, $options = []) ajoute un bouton d'action personnalisé à côté des boutons Modifier/Supprimer intégrés sur chaque ligne. $functionName est une fonction côté serveur (généralement dans functions.php) qui reçoit la clé primaire et les données de la ligne :

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

Plusieurs appels à ->button() s'accumulent - un bouton par appel, tout comme ->disable_logic()/->hide_logic().

Options

OptionCe qu'elle fait
iconUne chaîne de classe d'icône, ex. 'fa fa-check'.
confirmUn message de confirmation (window.confirm) affiché avant que l'action ne se déclenche. Omettez pour aucune confirmation. Ignoré dès que prompt est défini - le bouton OK de la fenêtre modale de saisie fait déjà office de confirmation.
condition / condition_modeUne expression "champ OP valeur" (ex. 'amount<1000') évaluée sur les données propres de la ligne, réévaluée en direct côté client dès qu'un champ référencé est modifié en édition en ligne. condition_mode vaut 'hide' (par défaut, retire le bouton) ou 'disable' (le garde visible mais grisé).
disable_conditionUne seconde condition indépendante, toujours en mode désactivation quel que soit condition_mode - pour "masquer sous la condition A, mais aussi griser sous la condition B" en un seul appel.
pathCharge $functionName depuis un fichier autre que functions.php.
beforeLe texte du bouton à l'état inactif. Par défaut $label.
loadingAffiché pendant toute la durée du clic en cours (même traitement avec indicateur de chargement que Save/Delete). Par défaut 'Processing…'.
afterAffiché brièvement une fois le clic réussi, avant de revenir à before. Omettez pour ignorer et revenir immédiatement.
formAffiche aussi ce bouton dans le pied de page du formulaire d'édition, aux côtés de Enregistrer/Fermer. Désactivé par défaut.
gridAffiche ce bouton dans la cellule Actions de la grille/au survol/dans le menu ellipsis. Activé par défaut.
promptUn tableau de définitions de champs - cliquer sur le bouton ouvre d'abord une petite fenêtre modale, collectant une valeur par champ avant l'appel serveur. Réutilise les mêmes contrôles de champ que le vrai formulaire d'édition, y compris une liste déroulante relation avec recherche.

Fenêtres modales de saisie

Définissez prompt pour collecter une saisie avant l'exécution du gestionnaire. Chaque entrée nécessite field, label, et type (text/int/decimal/date/datetime/select/relation). Une entrée relation prend les mêmes options target_table/target_id/target_name/where/order_by/multi/search que ->relation() elle-même :

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

Une fonction de gestionnaire qui utilise aussi prompt reçoit un 4e paramètre, $promptValues - une fonction simple à 3 paramètres comme dans le premier exemple ci-dessus ne le voit tout simplement jamais. $promptValues est toujours transmis (un tableau vide lorsque prompt n'a jamais été défini).

Emplacement et style de la colonne Actions

button_position($position) définit de quel côté de la grille se trouve la colonne Actions - 'left' ou 'right' (par défaut).

button_style($style, $showText = null) contrôle la façon dont les actions Modifier/Supprimer/personnalisées de chaque ligne sont affichées :

StyleComportement
'buttons' (défaut)Toujours visibles, comme avant.
'hover'Invisibles jusqu'au survol de la ligne - apparaissent en fondu sous forme de popup flottant sous la ligne. Non accessible sur les appareils tactiles sans état de survol.
'reveal'Le même fondu déclenché au survol que 'hover', mais les boutons vivent dans le flux normal du document au lieu d'un popup flottant, si bien que la ligne ne déborde jamais sur les lignes adjacentes.
'ellipsis'Un unique bouton "⋯" par ligne ouvre un petit menu déroulant avec les actions comme éléments de menu.

Ceci est purement un choix d'affichage - ->unset_edit()/->unset_remove() sont ce qui retire réellement une action ; button_style() ne change que la manière dont celles qui restent sont affichées. $showText affiche par défaut le libellé texte de chaque bouton à côté de son icône ; passez false pour n'afficher que l'icône seule avec le libellé en infobulle au survol.

Confirmation de suppression et libellé du bouton Ajouter

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

remove_confirm($message = true) contrôle la boîte de dialogue de confirmation affichée avant une suppression : true (par défaut) confirme avec le message standard, false supprime immédiatement sans confirmation, et une chaîne confirme en affichant ce message exact à la place.