Con Gravity Forms podemos realizar cálculos matemáticos usando los datos introducidos por el usuario en campos de tipo numérico. Es algo sencillo que, una vez se conoce la notación para crear las fórmulas, no tiene mucho secreto.
Pero muchas veces necesitamos realizar cálculos según las selecciones realizadas por el usuario en campos no numéricos, como checkboxes, radio botones o selectores. Crear un tarificador que calcule y envíe por email un presupuesto personalizado es el ejemplo más típico.
En principio, Gravity Forms no da opción para ello, pero se puede hacer capturando el contenido del formulario cuando el usuario lo envía, comprobando sus elecciones, y realizando los cálculos por nuestra cuenta. Vamos a ver cómo podemos realizar cálculos matemáticos en función de los datos introducidos por el usuario en un formulario con Gravity Forms.
Tabla de contenidos
Cálculos con campos numéricos en Gravity Forms
Realizar cálculos sobre datos numéricos que se han solicitado al usuario en el formulario es bastante sencillo, casi trivial, y Gravity Forms ya incluye esa funcionalidad desde hace bastante tiempo. Sólo tiene una limitación: estos cálculos sólo se permiten usando campos numéricos.
En principio suena bastante lógico. ¿Cómo vamos a hacer cálculos si no es con números? Sin embargo sería una opción muy útil y poderosa si Gravity Forms permitiera asignar valores a las opciones de un campo para después aplicarles fórmulas.
Por ejemplo, para crear un presupuesto personalizado en función de las opciones elegidas, y enviar el resultado por mail. No sufras, que es posible hacerlo: aunque tiene sus complicaciones, son salvables como veremos en la segunda parte del artículo.
Pero vayamos paso a paso y empecemos por lo sencillo. Vamos a ver cómo solicitar datos (numéricos) al usuario y devolverle un valor en función de sus respuestas.
Aplicar fórmulas a los valores de los campos
Para eso necesitamos como mínimo dos campos de valor numérico: uno que solicite un dato al usuario (si ya tuviéramos todos los datos de antemano no tendría sentido calcular nada), y otro que muestre el resultado de la fórmula aplicada. Porque, efectivamente, el resultado se va a almacenar en un campo del formulario.
Pero en este ejemplo vamos a usar tres campos: dos de ellos solicitarán datos con los que realizaremos nuestros cálculos, y el tercero que será el que los muestre. Así el ejemplo queda más completo.
Pues bien, solamente tenemos que configurar el campo que va a mostrar el resultado. El proceso sería el siguiente:
- En la pestaña General del campo, marcamos la opción Habilitar cálculo
- En el campo Fórmula introducimos la fórmula a calcular
Difícil, ¿verdad? Para crear la fórmula podemos utilizar el valor de otros campos (los podemos insertar ayudándonos con el desplegable Pegar etiqueta de inserción), números y los signos ariméticos «+», «-«, «*», «/», «(» y «)», que podemos escribir con el teclado o con los botones al efecto. Si tienes dudas, puedes ayudarte del enlace Validar fórmula.
Vídeo: fórmulas en campos de Gravity Forms
Como explicado así puede parecer más complicado de lo que en realidad es, nada mejor que ver el proceso con un vídeo:
Mostrar y presentar el resultado al usuario
El campo que tiene habilitada la fórmula no puede ser rellenado ni/o modificado por el usuario, y mostrará directamente el resultado de aplicar la fórmula. De hecho, se actualiza sólo mostrando siempre el resultado en según se introducen nuevos datos o se cambian los ya introducidos.
Pero resulta que a veces lo que queremos no es mostrar el dato al usuario en la pantalla, sino de alguna forma comunicárselo después, una vez ha enviado el formulario. Para esto tenemos dos opciones: o notificárselo por email (algo muy habitual en estrategias de captación de emails) o mostrárselo en contexto con otros contenidos.
Enviar el resultado por email
Nada más sencillo que hacer esto. Para ello sólo hay que ir a la configuración de notificaciones del formulario (Ajustes > Notificaciones) y crear una nueva que se envíe al usuario (en Enviar a eliges Selecciona un campo para seleccionar el campo en el que has pedido que introduzca su email). Después, en el texto del email, sólo tienes que incluir el campo en el que has aplicado la fórmula (en el ejemplo de arriba, el campo Total).
Lo único que tienes que tener en cuenta es que ese campo no debe verse en el formulario, porque como ya hemos visto muestra el resultado de forma dinámica: el usuario no querrá recibirlo en su email si ya lo ha visto en pantalla.
La solución es bien sencilla: marcar ese campo como Oculto (pestaña Avanzado > Visibilidad). De esta forma el campo no está a la vista en el formulario, pero sí está disponible para enviar su contenido por correo electrónico.
Mostrar el resultado en contexto
La otra opción es, una vez enviado el formulario, llevar al usuario a otra parte de la web donde se utilizará el resultado para mostrárselo dentro de un contexto, que incluso puede ser personalizado en función de este resultado.
Para ello tendremos que pasar el valor de este campo a través de la URL y capturarlo en destino mediante el método GET. Si todo esto te suena a chino, puedes echar un vistazo a este artículo y este vídeo, en los que explico cómo hacer algo así con todo detalle.
Cálculos en función de campos no numéricos
Como has podido ver, realizar cálculos con el contenido de campos numéricos en Gravity Forms es sencillísimo, gracias a que ya está provisto por el propio plugin.
Sin embargo, la cosa se complica cuando lo que necesitamos es realizar cálculos y operaciones asignando valores no provistos propiamente por un campo, sino en función del contenido de un campo. La cosa entonces se complica porque Gravity Forms no ofrece esa posibilidad.
Lo que no significa que no se pueda hacer.
Crear un tarificador con Gravity Forms
El ejemplo más típico es éste: el de un tarificador (me resisto a usar la extendida palabra presupuestador, que no está aceptada por la RAE) que calcula de forma automática un costo, tarifa, prima o lo que haga falta, en función de las respuestas dadas en el formulario.
Seguro que lo tienes en mente, así que el ejemplo será poco prolijo: podemos pedir al usuario la edad y la superficie de su vivienda para calcular automáticamente la prima de un seguro de hogar. Fíjate que, aunque ambos sean datos numéricos, no se trata de aplicar una fórmula aritmética sencilla, sino más bien de variar porcentajes según tramos.
Además (y con esto se complica todo hasta el infinito) hay muchos otros factores, no numéricos, que influyen. Por ejemplo, la prima variará en función de si se trata de una vivienda aislada, un adosado o un piso, si está en población o fuera de ella, si tiene o no puerta blindada…
Como ves todo esto son datos no numéricos que influirán en el cálculo final de una forma que, además, no tiene por qué ser aritmética.
Filtrar el formulario para realizar cálculos complejos
Y aquí es donde viene la magia de los filtros. Ya he hablado de ellos (filter hooks) muchas veces, unas maravillosas funciones que nos permiten capturar datos en alguna parte del proceso, trabajar con ellos, modificarlos si es preciso y después devolverlos a la rutina original.
Normalmente me refiero a ellos cuando hablo de WordPress o de WooCommerce, pero Gravity Forms también incluye algunos filtros. En esta ocasión nos va a ser utilísimo el filtro gform_pre_submission_filter.
Este filtro actúa justo después de que el usuario pulse el botón para enviar el formulario y éste sea validado, y antes de que se realice ninguna notificación o confirmación asociada a él. Es decir, justo cuando nos hace falta.
¿Y qué nos va a permitir este filtro? Pues capturar el contenido de los campos del formulario y trabajar con ellos, asignando valores a las distintas opciones, comprobando las selecciones hechas por el usuario y realizando los cálculos correspondientes.
Realizar esto requiere bastante programación con PHP y un conocimiento profundo de las funciones utilizadas por Gravity Forms. Por ejemplo, digamos que el usuario rellena el formulario con ID 3, y que queremos comprobar qué opción ha seleccionado en el campo con ID 8. Primero deberíamos capturar el formulario y prepararnos para trabajar con el campo correspondiente así:
add_filter ('gform_pre_submission_filter_5', function ($formulario) {
foreach ($formulario['fields'] as &$campo)
if ($campo->id != 8)
continue;
//Aquí viene todo lo que tengamos que hacer con el campo 8
});
A partir de ahí, trabajo tedioso: comprobar qué tipo de campo es, cuál es la selección realizada por el usuario, cómo influye ésta en la fórmula a aplicar para calcular la tarifa, etcétera.
Por último, una vez realizadas todas las comprobaciones y hechos los cálculos, asignaríamos el resultado final a un campo oculto que será el que se incluya, ya con el valor definitivo, en el email que se envía al cliente tal y como veíamos más arriba.
Conclusión
Como ves, es posible realizar un tarificador complejo con Gravity Forms, pero no es sencillo. Si se trata de realizar un presupuesto utilizando campos númericos, perfecto, muy fácil, pero si son necesarios cálculos condicionados a selecciones no numéricas, la cosa se complica bastante.
¿Tienes que programar un tarificador en tu web WordPress? ¿Quieres enviar presupuestos personalizados a tus clientes de forma automática a través de un formulario? Si es así, no tienes más que contactar conmigo y vemos en detalle qué necesitas.