/

Botones de fila personalizados

Añade un botón de acción por fila - confirmaciones, condiciones en vivo y una ventana modal de solicitud que recoge datos, todo mediante ->button().

Añadir un botón

->button($label, $functionName, $options = []) añade un botón de acción personalizado junto a los botones integrados Editar/Eliminar de cada fila. $functionName es una función del lado del servidor (normalmente en functions.php) que recibe la clave primaria y los datos de la fila:

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

Varias llamadas a ->button() se acumulan - un botón por llamada, igual que ->disable_logic()/->hide_logic().

Opciones

OpciónQué hace
iconUna cadena de clase de icono, p. ej. 'fa fa-check'.
confirmUn mensaje de confirmación (window.confirm) mostrado antes de que se dispare la acción. Se omite para no mostrar confirmación. Se ignora siempre que prompt esté establecido - el propio botón OK de la ventana modal de solicitud ya hace de confirmación.
condition / condition_modeUna expresión "campo OP valor" (p. ej. 'amount<1000') evaluada contra los propios datos de la fila, reevaluada en vivo del lado del cliente en el instante en que se edita en línea un campo referenciado. condition_mode es 'hide' (por defecto, elimina el botón) o 'disable' (lo mantiene visible pero atenuado).
disable_conditionUna segunda condición independiente, siempre en modo deshabilitar sin importar condition_mode - para "ocultar bajo la condición A, pero además atenuar bajo la condición B" en una sola llamada.
pathCarga $functionName desde un archivo distinto de functions.php.
beforeEl texto del botón en estado inactivo. Por defecto es $label.
loadingSe muestra durante todo el tiempo que el clic está en curso (el mismo tratamiento de spinner que usan Guardar/Eliminar). Por defecto es 'Processing…'.
afterSe muestra brevemente en cuanto el clic tiene éxito, antes de volver a before. Se omite para saltarse esto y volver de inmediato.
formMuestra también este botón en el propio pie del formulario de edición, junto a Guardar/Cerrar. Desactivado por defecto.
gridMuestra este botón en la celda de acciones/al pasar el ratón/menú de puntos suspensivos de la cuadrícula. Activado por defecto.
promptUn array de definiciones de campo - al hacer clic en el botón se abre primero una pequeña ventana modal, que recoge un valor por campo antes de la llamada al servidor. Reutiliza los mismos controles de campo que usa el formulario de edición real, incluido un desplegable relation con búsqueda.

Ventanas modales de solicitud (prompt)

Establece prompt para recoger datos antes de que se ejecute el manejador. Cada entrada necesita field, label y type (text/int/decimal/date/datetime/select/relation). Una entrada relation admite las mismas opciones target_table/target_id/target_name/where/order_by/multi/search que admite el propio ->relation():

$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 función manejadora que también usa prompt recibe un 4º parámetro, $promptValues - una función simple de 3 parámetros como la del primer ejemplo de arriba simplemente nunca lo ve. $promptValues siempre se pasa (un array vacío cuando nunca se estableció prompt).

Ubicación y estilo de la columna de acciones

button_position($position) establece a qué lado de la cuadrícula se sitúa la columna de acciones - 'left' o 'right' (por defecto).

button_style($style, $showText = null) controla cómo se muestran las acciones de Editar/Eliminar/personalizadas por fila:

EstiloComportamiento
'buttons' (por defecto)Siempre visibles, exactamente como antes.
'hover'Invisibles hasta que se pasa el ratón por la fila - aparecen con transición como una ventana emergente flotante debajo de la fila. No accesible en dispositivos táctiles sin estado de hover.
'reveal'La misma aparición activada por hover que 'hover', pero los botones viven en el flujo normal del documento en lugar de una ventana emergente flotante, así que la fila nunca se desborda sobre las filas adyacentes.
'ellipsis'Un único botón "⋯" por fila abre un pequeño desplegable con las acciones como elementos de menú.

Esto es puramente una elección de visualización - ->unset_edit()/->unset_remove() son lo que realmente elimina una acción; button_style() solo cambia cómo se muestran las que quedan. $showText por defecto muestra la etiqueta de texto de cada botón junto a su icono; pásale false para mostrar solo el icono con la etiqueta como información sobre herramientas al pasar el ratón.

Confirmación de eliminación y la etiqueta del botón Añadir

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

remove_confirm($message = true) controla el cuadro de diálogo de confirmación mostrado antes de una eliminación: true (por defecto) confirma con el mensaje estándar, false elimina de inmediato sin confirmación, y una cadena confirma mostrando exactamente ese mensaje en su lugar.