/

Campos calculados en vivo

Calcula el valor de un campo del formulario en vivo en el navegador a medida que cambian otros campos, desde un producto simple hasta una suma sobre una tabla hija anidada.

set_formular()

->set_formular($targetField, $expression, $event = null, $watchFields = null) es un campo calculado en vivo del lado del cliente: cada vez que $event se dispara en cualquiera de los controles propios de $watchFields en el formulario abierto, se evalúa $expression y se escribe en $targetField. Cualquier nombre de campo suelto en $expression (por ejemplo, quantity) se sustituye automáticamente por el valor actual de ese campo - sin necesidad de análisis manual.

$xcrud->set_formular('total', 'quantity*price');
ParámetroTipoPor defectoDescripción
$targetFieldstring-El campo en el que se escribe el valor calculado; debe ser un campo editable en lista blanca
$expressionstring-Una expresión JS; los nombres de campo sueltos se sustituyen por su valor actual
$event?stringnullEvento DOM que dispara el recálculo; null usa por defecto 'input' (recalcula en cada pulsación de tecla)
$watchFields?stringnullCampos a observar, separados por comas; null detecta automáticamente todos los campos a los que hace referencia $expression

$expression es JavaScript escrito por el desarrollador y de confianza - nunca está influenciado por datos de la petición/usuario, así que se envía al cliente sin firmar y se ejecuta directamente, no a través de un evaluador en sandbox.

Evento y lista de observación explícitos

Omite $event/$watchFields para el caso común anterior. Especifícalos cuando los campos a observar no sean simplemente "todos los campos que menciona la expresión", o para optar por un recálculo menos frecuente (por ejemplo, solo al perder el foco):

$xcrud->set_formular(
    'email',
    '"{firstName}".toLowerCase() + ".{lastName}@myoffice.com".toLowerCase();',
    'onmouseout',
    'firstName'
);

Escribir un valor calculado en un campo destino solo funciona para controles con un único valor plano (texto/textarea/número/fecha/fecha y hora/hora/contraseña/año/precio/un select único) - los campos booleano/radio/switch/checkboxes/multiselect/relación/subida no son compatibles como destino de fórmula.

Agregación sobre una tabla anidada

Una fórmula también puede agregar el propio campo de una tabla hija nested_table() directa, referenciado como childTableName.fieldName usando la sintaxis sum()/avg()/count()/min()/max():

$xcrud->set_formular('totalAmount', 'sum(orderdetails.priceEach)');

Esto recalcula totalAmount en vivo cada vez que cambian los datos de fila de la pestaña anidada "orderdetails" (carga inicial, o tras añadir/editar/eliminar una línea), mientras el formulario de edición del padre permanezca abierto. Solo actualiza el control destino del formulario abierto - no guarda por sí mismo la fila padre. Solo se admite un nivel de profundidad, y count() ignora fieldName (aún requerido para mantener una forma consistente childTable.field) - siempre cuenta filas. Consulta Resumen de tablas anidadas para configurar la propia tabla hija.