Depurar código en Joomla con FirePHP

Hay muchas formas de depurar código en PHP. Lo más habitual y rápido es usar ‘echo’ y ‘var_dump’ a cascoporro y listo. Pero si queremos algo un poco más profesional, firePHP es una excelente opción.

FirePHP es una extensión de la ya conocida extensión FireBug de FireFox.

Con esta herramienta, e incluyendo una pequeña librería en nuestro proyecto, podemos simplemente poner “fb($variable);” y en la consola de nuestro firebug nos aparecerá como un var_dump mejorado de la estructura y contenido de esa variable.

Así no ensuciamos la salida estándar de nuestro proyecto. xD

firephp en un item de K2

Si usamos Joomla, incluir la librería es mucho más fácil gracias a la extensión “J FirePHP”.

Solo tenemos que instalar y habilitar el plugin y listo. Ya podemos usar la función ‘fb’ en cualquier parte del código.

Además, el plugin permite también hacer un control de excepciones mediante firePHP y algunas otras opciones avanzadas en las que no vamos a entrar.

Tenéis toda la información en los enlaces.

NOTAS:

* 16/08/2011: A veces FirePHP no funciona con algunas versiones de firefox (como la 6) en combinación con algunas versiones de firebug. Es mas, tener instaladas algunas versiones de firebug y firephp en firefox 6 hace que firebug “desaparezca” y también otros complementos (como xmarks). Para solucionarlo reinstale la version 5 de firefox y las versiones de firebug 1.8.1 y de firephp 0.6.1.

* 16/08/2011: Si instalas el plugin y ves que no te muestra nada en consola comprueba que la opción del plugin Limit functionality to Joomla debug mode esta deshabilitada o bien habilita la depuración de joomla desde la configuración global.

Guía de buenas prácticas en el desarrollo Front End

Aquí os dejamos un gran recopilatorio sobre ciertos aspectos que tenemos que tener en cuenta cuando estamos desarrollando un proyecto.

Desde la definición del DOCTYPE, el uso de microformatos, o los ‘alt’ en las imágenes, hasta el código en javascript, jquery, css, e incluso alguna anotación sobre HTML5.

Front end development guidelines (en inglés)

Vale la pena darle un vistazo.

xD

Cadena de texto multilínea en javascript

Parecerá una tontería pero seguro que muchos aún andan concatenando las líneas de un string con las ‘comillas’ y el ‘más’, al estilo:

var s = "Esto es un texto " +
"multilinea en javascript\n" +
"Gracias.";
alert(s);
/* Salida:
Esto es un texto multilinea en javascript
Gracias.
*/

No es mucho más sencillo, esto?

var s = "Esto es un texto \
multilinea en javascript\n\
Gracias.";
alert(s);
/* Salida:
Esto es un texto multilinea en javascript
Gracias.
*/

Happy codding!

Problemas en la salida cuando usamos include en php

Para volverse loco!
Resulta que realizando un código en php muy sencillo, veía que el código generado no se visualizaba correctamente.
Se creaban unos espacios extraños, y viendo el código fuente de forma normal y viéndolo con el Firebug, veía que no se correspondía.

El código fuente parecía estar bien, pero en el firebug las cosas me salían de una forma muy extraña, por ejemplo, algunas referencias a css y js del head, me las ponía debajo de body.

Un auténtico misterio.

A base de ir comentando a trozos el código para detectar donde estaba el problema, me di cuenta de que el error estaba cuando utilizaba la función ‘include’.

Después de utilizar include, include_once, require, require_once, con comillas dobles, con comillas simples, con paréntesis… al final, leyendo los comentarios del include de php.net, vi que un usuario comentaba que había un ‘security flaw’ y que para solucionarlo, usaba los métodos ‘ob_start()’ y ‘ob_end_clean()’ antes y después de hacer los includes.

Con la mayor parte del código comentado, al poner estas funciones, el problema parecía haberse solucionado… pero en cuanto descomenté el resto… otra vez la cosa estaba mal.

Después de muchas pruebas, frustraciones, y búsquedas en google, di con esta página: http://bugs.php.net/bug.php?id=40072

Ahí estaba la solución! El puto BOM del utf-8!! (con perdón)

Había probado el tema de la codificación de los archivos, pero no se me había ocurrido usar la codificación “utf-8 sin BOM”.

Lo peor de todo, es que entonces recordé… que esto ya me había pasado antes!!

Ayyyy… que malo es el Alzeimer…

Pues nada.
Espero que si algún día os pasa algo así, encontréis este post y os ayude a resolver rápidamente el problema.

Recordar que en notepad++ en español tenemos las opciones “utf-8” y “utf-8 sin BOM” pero que en otros editores o versiones podemos encontrarnos con “utf-8” y “utf-8 with signature”. En este último caso, habría que utilizar el “utf-8”.

Para los que tengáis la curiosidad de saber que es el BOM, que sepáis que es el ‘Byte Order Mark’ y podéis leer más en la wikipedia.

Creando un plugin de Joomla!

Crear un plugin de Joomla! es algo bastante sencillo.

En resumen, un plugin básico constaría de un archivo php y otro xml con el mismo nombre.

El nombre de los archivos es importante porque participa en formar el nombre de la clase del php.

Haremos que nuestra clase herede de JPlugin, y que sobrescriba los métodos correspondientes a los eventos que queramos.

Un esqueleto de plugin básico sería:

<?php

defined( '_JEXEC' ) or die( 'Acceso Restringido' );
jimport( 'joomla.plugin.plugin' );

class plgContentMyPlugin extends JPlugin {

function plgContentMyPlugin( &$subject ) {
    parent::__construct( $subject );
}

function onBeforeDisplayContent(&$article, &$params, $limitstart=0) {

    $plugin =& JPluginHelper::getPlugin('content', 'MyPlugin');
    $pluginParams = new JParameter( $plugin->params );
    $mensaje = "";

    $mensaje = $pluginParams->get('mensaje', 'Hola Mundo');

    $salidaPantalla = '<h2>' . $mensaje . '</h2>';

    return $salidaPantalla;
}

}
?>

Podéis leer una explicación más completa y ver qué forma tiene que tener el xml en este post de nosolocodigo.

Lo siguiente que tenéis que tener en cuenta, es qué evento queréis utilizar para realizar vuestro cometido.

Podéis ver una lista de eventos y algo más de información sobre la creación de plugins en esta página de la documentación oficial de Joomla!.

Con esto en principio ya lo tenéis todo.

Os recomendamos que después de documentaros, al final penséis en que plugin, de los que ya tenéis en la carpeta ‘/plugins/’, es el que realiza la acción que más se parece a la que queréis hacer, y lo cojáis como base para hacer el vuestro.

Como procedimiento, recomendamos, ocuparnos primero de la estructura del plugin y que funcione su instalación, para después, preocuparnos de la funcionalidad trabajando directamente con los ficheros de código, acordándonos antes de poner la opción ‘Informe de errores’ a ‘Maximo’ en la configuración global de servidor, para que veamos si tenemos algún error y no nos quede un pantallazo en blanco. xD

Por último, tened en cuenta grabar los archivos con codificación UTF-8 y hacer el zip con la opción de ‘Enviar a  -> Carpeta comprimida en zip’ de Windows o similar para que sea un zip lo mas estándar posible y no de problemas al instalarlo desde Joomla!.

Esperamos que os haya servido de ayuda!