Blog

Mostrar número de pregunta en Quizzin

Maite, directora de la Escuela Parla, me ha pedido que implemente las pruebas de nivel en la página web de la escuela.

En principio se había planteado utilizar la simplicidad y flexibilidad de formularios de Contact Form 7 aprovechando que el complemento ya estaba instalado. La idea era programar en PHP un sistema que calculase respuestas correctas en base a los valores que devolviera un formulario de Contact Form 7. Pero la recursividad de código dentro de campos dentro de plugins dentro de plantillas.... me estaba dando demasiados problemas como para intentar tenerlo para principios de septiembre (las vacaciones están aquí mismo).

La solución, después de estar unas cuantas horas rebuscando entre plugins, ha sido Quizzin para Wordpress. Un plugin que implementa la gestión de formularios con preguntas tipo test y devuelve los resultados como variables (score, total, percentage, grade, wrong_answers, rating, quiz_name y description).

Una vez instalado el plugin y funcionando tengo dos problemas a resolver. El primero es cómo enviar los resultados por correo electrónico añadiendo tanto los resultados de la prueba tipo test como los datos de contacto que la identifiquen. Este problema lo trataré en otro artículo después de (o durante las vacaciones). El segundo problema es como mostrar los números de pregunta.

La solución no es para nada complicada, solo hay que romperse la cabeza averiguando qué fichero del plugin hace qué y rebuscar entre el código.

El fichero show_quizzin.php gestiona tanto la muestra de las preguntas y respuestas como la muestra de los resultados. Cerca del final del fichero, bajo el comentario // Show The Quiz se inicia la variable $question_count como contador para utilizarla en el atributo id del div class="quizzin-question". Vamos a utilizar esta variable que incrementa en 1 por cada pregunta para insertarla antes de mostrar la pregunta.

Cuatro lineas por debajo encontraréis la linea

echo "<div class='question-content'>". stripslashes($ques->question) . "</div><br />";

sustitúyela por

echo "<div class='question-content'>". $question_count . ". " . stripslashes($ques->question) . "</div><br />";

Asunto arreglado.

2010

Fallece Paco Casanova

Hoy he pasado por el nuevo local de Casanova Foto y me ha parecido que nunca lo había visto tan apagado. No me ha llamado excesivamente la atención pero es algo en lo que me he fijado. Al llegar a casa me he puesto a revisar los blogs y webs habituales y he leído que Martin Gallego tenía una mala noticia. Por supuesto no suponía que lo uno y lo otro estaban relacionados.

Al leer el título del artículo de Martin (una mala noticia) he imaginado que en una de sus salidas macro habría perdido o roto alguna pieza de su material. Me he encontrado aguantando la respiración y pensando "espera, léelo otra vez". Ha sido en ese momento cuando me he enterado de que Paco Casanova falleció el martes, 13 de abril.

Conocía al señor Casanova en la medida que puede conocerlo un cliente, no hubo más trato que el comercial pero este fue siempre correcto, profesional y satisfactorio. Recuerdo que la primera vez que lo vi fue en 1998, en el piso de arriba del local de la calle Pelayo, cuando fui a cambiar mis dos objetivos Tamron y Sigma por un Canon para mi EOS 500. Era la primera vez que pasaba por allí y me dije que no sería la última. Si el material de ocasión que vendían estaba tan mirado y remirado por ese señor, que parecía entre el jefe y el abuelo de todos, no vendían cualquier cosa.

Estoy seguro que el señor Casanova ha ido directo hacia la luz.

HastalosMegaPíxeles ha publicado una entrevista para que conozcamos mejor a el Jefe. En la web de Casanova Foto hay otra entrevista, de Joan Queralt a Paco Casanova en el año 2008, titulada Paco Casanova, la fotografía tras un mostrador. Llibert Teixidó, en Fotografia.net, también ha publicado unas lineas sobre quien con empeño creó el grupo Casanova Fotografía.

2010

nextGEN Gallery y la relación de aspecto de las miniaturas

Sí, lo confieso. Entre foto y foto diseño páginas web. Actualmente trabajo en la nueva web de la agencia de representación de fotógrafos Gianfranco Meza. Para gestionar sus galerías decidí utilizar el plugin para Wordpress nextGEN Gallery. Una vez instalado el plugin, probado todas sus maravillas y un paso más allá del punto de no retorno me percato de que algo está fallando entre tanta maravilla: las miniaturas empezaban a tener diferentes tamaños.

Tras un repaso a cientos de lineas de código php y otras tantas webs que encontré en Google buscando "nextgen me esta volviendo loco" podría resumir el problema en que a partir de la versión 1.4.1 nextGEN se hace un lio con las miniaturas si la imagen original no tiene la misma relación de aspecto que la especificada en las opciones. El error se produce tanto en la generación automática de miniaturas, en la generación por lotes como en el reencuadre. Por pequeña que sea esta diferencia en la relación de aspecto, aunque sólo sea 1 pixel, descuadra la vista en cuadrícula.

Para evitar tocar el código del plugin y también el sudor frio que aparece cuando, entre tantas lineas de código, puedes crear más errores que soluciones, el primer remedio que viene a la cabeza es forzar el tamaño de las miniaturas mediante CSS. Tan sólo habría que añadir los tags width y height a la definición .ngg-gallery-thumbnail img en nggallery.css. Pero esta solución es rápidamente descartable por dos motivos. El primero es que perderíamos el dinamismo que ofrece la posibilidad de cambiar el tamaño de las miniaturas desde el panel de opciones nextGEN pues .ngg-gallery-thumbnail img estaría forzando el tamaño de las miniaturas. El segundo y más importante es la deformación que sufriría la miniatura. Supongamos que nextGEN genera la miniatura de una imagen con relación de 1:1 y que, por diseño de la cuadrícula, hemos forzado las miniaturas a 16:9, entonces estas se verían achatadas. Lo mismo que ocurre cuando estás viendo una emisión en 4:3 y has forzado a tu televisor a rellenar toda la pantalla 16:9. ¿Entonces que hago si no quiero o no me atrevo a modificar el código del plugin? Ya que estás ejecutando tu web desde un servidor con PHP puedes usar algún script alternativo que genere miniaturas a partir de la imagen original. Aquí tenéis los resultados de Google con las keywords php thumbnail generator. Una vez copiado el script en tu servidor tendrás que insertar la llamada en todos los ficheros php que generan las vistas que utilizas en nextGEN. Por ejemplo, si utilizas la vista de galerias con el formato lista de imágenes tendrás que insertar la llamada al nuevo script en /wp-content/plugins/nextgen-gallery/view/gallery.php, sustituyendo echo $image->thumbnailURL por la llamada especificada en el manual de tu nuevo script generador de miniaturas. Supongamos que vas a utilizar TimThumb y que quieres tus miniaturas de 200x100 píxeles, entonces sustituirías
<img title="<?php echo $image->alttext ?>" alt="<?php echo $image->alttext ?>" src="<?php echo $image->thumbnailURL ?>" <?php echo $image->size ?> />
por
<img title="<?php echo $image->alttext ?>" alt="<?php echo $image->alttext ?>" src="/directorio-del-script/timthumb.php?src=<?php echo $image->imageurl ?>&h=100&w=200&zc=1" />.

Este sistema es una manera de solucionar el problema pero, a diferencia de nextGEN que sirve una miniatura generada durante la subida de imágenes y no en tiempo real, estos scripts tendrían que ejecutarse cada vez por cada una de las miniaturas que se mostrasen en tu vista de galerías y álbumes. Esto implica aumentar el trabajo del servidor y tener que procesar una imagen de tamaño completo para visualizar sólo una miniatura, con lo que tu galería se volverá tan lenta que pensarás que has vuelto a los '90. ¿Vas pillando por donde voy? No te queda otro remedio que modificar el código php de nextGEN a la espera de que Alex Rabe solucione el problema en una futura versión. ¿He oído modificar? Entonces lo primero que vamos a hacer es una copia de seguridad de los ficheros que tocaremos en /wp-content/plugins/nextgen-gallery/admin/, edit-thumbnail.php y functions.php. Después aplicaremos los parches que ofrece Holix en la entrada [Plugin: NextGEN Gallery] Crop thumbnails? del foro de Wordpress.org. En edit-thumbnail.php localiza

jQuery('#imageToEdit').Jcrop({ onChange: showPreview, onSelect: showPreview, aspectRatio: <?php echo round($WidthHtmlPrev/$HeightHtmlPrev,1) ?> });

y sustitúyelo por

jQuery('#imageToEdit').Jcrop({ onChange: showPreview, onSelect: showPreview, aspectRatio: <?php echo round($WidthHtmlPrev/$HeightHtmlPrev,3) ?> });

En functions.php localiza

if (!$thumb->error) { if ($ngg->options['thumbfix']) { // check for portrait format if ($thumb->currentDimensions['height'] > $thumb->currentDimensions['width']) { // first resize to the wanted width $thumb->resize($ngg->options['thumbwidth'], 0); // get optimal y startpos

y sustitúyelo por

if (!$thumb->error) { if ($ngg->options['thumbfix']) { // check for portrait format $curTan = $thumb->currentDimensions['width'] / $thumb->currentDimensions['height']; $thTan = $ngg->options['thumbwidth'] / $ngg->options['thumbheight']; if ($curTan <= $thTan) { // first resize to the wanted width $thumb->resize($ngg->options['thumbwidth'], 0); // get optimal y startpos

Ahora sólo te queda revisar tu galería y descansar tranquilo o restaurar las copias de seguridad y esperar que tu cliente vea positivo un mosaico descuadrado de imágenes en diferentes tamaños y aspectos.

nota: Corregido en la versión V1.5.0 - 18.03.2010 de NextGen Gallery.

2010
< 1 ... 6 7 8 9 10 11