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.
//Get a parameter by url START
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:
- Screen: Welcome Page – startpage.pstpl
- 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
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.
Tweets that mention Limesurvey: Pasar parámetros por url | Libro de Apuntes -- Topsy.com
[…] This post was mentioned on Twitter by Bruno Rico, Bruno Rico. Bruno Rico said: Limesurvey: Pasar parámetros por url http://goo.gl/fb/lb98h […]
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