Limesurvey: Pasar parámetros por url

Limesurvey es una herramienta gratuita y de código abierto para realizar encuestas. Nos permite crear encuestas realmente potentes, multiidioma, con itinerarios (si contesta A le muestro la pregunta B), preguntas predefinidas y además tiene una muy buena interfaz de exportación de resultados y reporting. Limesurvey permite el envío de parámetros por URL al finalizar una encuesta, lo que no tiene es una forma de guardar un parámetro enviado por url (post). Esto puede ser útil para:

  • Guardar los datos de origen de la visita mediante el envío de los parámetros codificados en la url de una encuesta de Limesurvey: Ej:http://encuesta.1midominio.es//index.php?utmsource=facebook
  • Guardar un id de usuario sacado desde otra aplicación para poder cruzar los datos: Ej:http://encuesta.1midominio.es//index.php?user=unidusuario

Resumiendo; lo que haremos será crear una pregunta tipo texto, que autocompletaremos con los datos leídos desde la url (utilizando javascript) y luego ocultaremos la pregunta mediante un cambio en la css. Ello nos permitirá tener esta funcionalidad editando una plantilla(template), sin tener que modificar el código fuente de limesurvey (muy útil si no controlamos el servidor donde está instalada la aplicación).

1.Creamos una pregunta de tipo texto «Long free text»

Ya sé que no es el tipo de dato más apropiado, que con un text me llegaría, pero cada uno envía por url lo que quiere 😉

2.Obtener el id del html de la pregunta:

Creamos todas las preguntas como solemos hacer y una vez activada la encuesta, miramos en el html el id del campo textarea de la primera pregunta donde queremos guardar el valor pasado por url.

3.Editar el archivo template.js de nuestra plantilla. Además modificaremos el código para incluir el id obtenido en el paso 2.

//—–INICIO copiar y pegar al final del archivo template.js

//Get a parameter by url START

//get url parameters
function gup( name ){
name = name.replace(/[\[]/,»\\\[«).replace(/[\]]/,»\\\]»);
var regexS = «[\\?&]»+name+»=([^&#]*)»;
var regex = new RegExp( regexS );
var results = regex.exec( window.location.href );
if( results == null )
return «»;
else
return results[1];
}
//get the id and update the textarea value
function get_remote_ses(){
var ctrlid=gup(‘ctrlid’);//control session values
var queid=gup(‘queid’); //question id (the id of the textarea to update)
if(!document.getElementById ) return 1;
//update form action
//var actionform=document.getElementById(‘limesurvey’).action;
var actionform=’index.php‘;
actionform=actionform+’?ctrlid=’+ctrlid+’&queid=’+queid;
document.getElementById(‘limesurvey’).action = actionform;
//Find the input by it’s id
//document.getElementById(queid).value = ctrlid;
document.getElementById(‘answer46848X1X1‘).value = ctrlid; //debemos sustituir answer46848X1X1 por el id del campo textarea que hayamos creado
if(!document.getElementById(‘answer35242X85X1398’)){return 0;}else{document.limesurvey.move.value = ‘movenext’; document.limesurvey.submit();return 1;}//autosubmit
return 0;
}
//Get a parameter by url END
//—–FIN copiar y pegar al final del archivo template.js

4.Modificar las plantillas para llamar a la función get_remote_ses() en el evento onload del body de las páginas

Una vez tenemos la función javascript que recupera los paarámetros, debemos llamarla cuando se carguen las preguntas. Para ello, modificaremos las plantillas:

  1. Screen: Welcome Page – startpage.pstpl
  2. Screen: Question Page – startpage.pstpl

Editaremos la etiqueta <body> para que incluya la llamada a la función: <body onload=»get_remote_ses()»>

5.Una vez comprobado, escondemos la pregunta modificando el archivo css

/*INICIO C&P Get a parameter by url*/
#question1{display:none;}*/
/*FIN C&P Get a parameter by url*/

6.Accedemos a la encuesta pasando el parámetro por url(en nuestro caso ctrlid)

http://encuesta.1midominio.es//index.php?sid=XXXX&newtest&ctrlid=YYYYY Siendo:

  • XXXX el id de la encuesta
  • YYYY el parámetro que queramos almacenar.

Problemas, deficiencias y TODOs:

  • Si el usuario no tiene javascript, este código no funciona.
  • Si el usuario no tiene css, verá la pregunta y podrá editarla a su antojo
  • Al pasar el parámetro por url, cualquier usuario puede cambiarlo a su antojo.
  • El código no permite pasar el id del elemento a modificar mediante acceso al DOM. De ahí la necesidad de mirar el id de la pregunta. No sé por qué ocurre y sigo mirando una posible solución… En el código está comentado un ejemplo que funciona en local y en el que podríamos pasar el parámetro por url de la forma: http://encuesta.1midominio.es//index.php?sid=46848&newtest&ctrlid=2&queid=answer46848X2X3
  • El punto anterior nos obliga a crear una nueva plantilla por encuesta, ya que el id de la pregunta es distinto en cada encuesta que creamos.
Seguramente también te interese leer principales errores y aciertos al plantear una encuesta.
Direcciones de interés sobre DOM y javascript:
chevron_left
chevron_right

Únete a la conversación

comment 3 comentarios
  • hloran

    Buena la informacion, pero con las ultimas versiones de limesurvey eso se puede configurar sin necesidad de hacer todo esto.
    El procedimento seria el siguiente:
    en la configuracion global de la encuesta, en la pestaña de integracion del panel, ahi se pueden crear todas las variables que vamos a recibir y a que pregunta se deben de adjuntar.

    Se ocultan las preguntas y listo

    Saudos.

    • Bruno Rico

      Gracias Hloran!
      Hace tiempo que no me pego con lime, pero me parece una muy buena noticia.
      Un saludo!
      Bruno

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Comentario
Nombre
Correo electrónico
Web

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.