Guardar una variable pasada por URL en webform
Pongamos el caso de que tenemos un formulario al que se puede acceder de diversas formas: a través de un enlace en la misma web, a través de anuncios en Facebook, a través de anuncios en Google AdWords… una forma de saber por donde ha venido más gente es crear parámetros que acompañen a la URL original, por ejemplo:
- Desde la misma Web: http://www.example.com/webform?misma-web
- Desde Facebook: http://www.example.com/webform?facebook
- Desde Google: http://www.example.com/webform?google
Estos enlaces los colocamos cada uno en su plataforma correspondiente, y luego mediante herramientas de analítica Web como Google Analytics podemos hacernos una idea de cuantas personas accedieron al formulario y desde donde lo hicieron.
Guardar el valor de los parámetros
Pero si además queremos almacenar el dato del parámetro en nuestro backend, de modo que podamos exportarlo después en Excel o CSV para realizar cálculos o estimaciones, tenemos que tocar código. Primero crearemos en nuestro Webform un campo oculto llamado ‘Piloto’ cuya clave o nombre de máquina será ‘piloto’. Seguidamente creamos un módulo que se sirva del hook hook_node_view para detectar que estamos viendo el formulario deseado, y si es así meteremos el parámetro en una variable de sesión con el mismo nombre:
1 2 3 4 5 6 7 |
function mimodulo_node_view($node, $view_mode, $langcode) { if($node->nid == NID) { if(isset($_SERVER['REDIRECT_QUERY_STRING'])) { $_SESSION['piloto'] = $_SERVER['REDIRECT_QUERY_STRING']; } } } |
Como vemos detectamos el formulario actual mediante el valor de su nid, luego comprobamos si existe algún tipo de parámetro y si es así lo metemos todo en la variable de sesión. ¿Por qué? porque queremos conocer de donde viene el usuario, y puede ser que no rellene el formulario a la primera. Puede ser que se vaya a otra página de nuestra Web y vuelva, con lo cual los parámetros se habrán perdido y no los podremos guardar. Pero si lo hacemos con variables de sesión, el problema se arregla.
Lo siguiente es alterar el formulario para meter en el campo oculto ‘piloto’ o bien el variable del parámetro (si existe) o bien la variable de sesión. Lo hacemos con hook_form_alter:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
function mimodulo_form_alter( &$form, &$form_state,$form_id ){ if ($form_id == 'ID-DEL-FORMULARIO') { if(isset($_SERVER['REDIRECT_QUERY_STRING'])) { $form['submitted']['piloto']['#default_value'] = $_SERVER['REDIRECT_QUERY_STRING']; $_SESSION['piloto'] = $_SERVER['REDIRECT_QUERY_STRING']; } else { if(isset($_SESSION['piloto'])) { $form['submitted']['piloto']['#default_value'] = $_SESSION['sdi_pilot']; } } } } |
Cuando el usuario le dé a guardar, almacenaremos desde donde ha hecho click.