Вы находитесь на странице: 1из 4

2.Hacer Mdulos para Joomla!

Aunque con las extensiones existentes de Joomla tendremos suficiente en la mayora de los casos, hay ocasiones en que necesitamos algo concreto, como por ejemplo un mdulo que muestre los usuarios registrados que cumplan aos hoy o uno que muestre los artculos publicados hace un ao. Y eso es precisamente lo que voy a hacer. En el siguiente tutorial vamos a crear un modulo que consulte a la base de datos y muestre el titulo de los artculos con un enlace al articulo completo. Hacer un mdulo es mucho ms sencillo que un componente. De hecho los mdulos estn pensados para mostrar datos concretos, como usuarios conectados, datos de contacto, mens etc que en muchos casos son una simple consulta a la base de datos. Los mdulos se encuentran situados en el directorio modules dentro del directorio de instalacin de Joomla y por cada mdulo hay una carpeta con nombre mod_nombredelModulo . Nuestro mdulo se va a llamar anyo, por lo tanto la carpeta del mdulo se llamar mod_anyo. La estructura de un mdulo es muy simple, tiene un fichero php con el mismo nombre que el mdulo, el cual es el punto de entrada, que tomar en control del mdulo cuando este sea llamado. Para separar la lgica de la presentacin se ha creado la clase helper, en la cual escribiremos nuestras funciones y de esta forma nuestro cdigo quedar ms ordenador y legible. La clase helper se encuentra en el fichero de nombre helper.php en la raz del directorio del mdulo. Desde mod_anyo.php ejecutaremos las funciones de la clase helper simplemente llamndolos como mtodos estticos , puedes encontrar una definicin de la clase en el sitio oficial de Joomla Por ultimo, tenemos el layout, o template, que se encuentra dentro de la carpeta tmpl de nuestro mdulo , el cual puede tener cualquier nombre que se te ocurra, pero le asignaremos default.php, que es el nombre por defecto que buscara Joomla si no le indicamos lo contrario.

Para la parte de Back-End disponemos del fichero mod_anyo.xml , donde definiremos los parmetros del mdulo y mediante el cual podremos parametrizar el modulo para hacerlo mas configurable y reutilizable. Vamos a ver el cdigo de nuestro punto de entrada: <?php // no acceso directo defined( '_JEXEC' ) or die( 'Restricted access' );

// incluir al helper que devolver los datos, solo una vez require_once( dirname(__FILE__).DS.'helper.php' ); $articulos = modAnyoHelper::getArticulos( $params ); require( JModuleHelper::getLayoutPath( 'mod_Anyo','default') ); ?> La primera lnea, como siempre que hacemos una extensin para Joomla, es una lnea de comprobacin, que asegura que no se este accediendo al modulo estar usando Joomla. La segunda lnea importa el fichero de la clase helper, donde almacenamos nuestras funciones. En la tercera lnea, ejecutamos la funcin getArticulos() de nuestro helper que devuelve una lista de objetos con los resultados de la consulta SQL. Por ltimo, hacemos un require del layout, que en nuestro se llama default y lo hacemos usando el mtodo getLayoutPath de la clase JModuleHelper, que devuelve la ruta del layout pasndole como parmetro el nombre del mdulo y al nombre del layout. En el helper almacenamos nuestras funciones, donde accedemos a datos para recuperar la lista de artculos que se escribieron hoy hace un anyo. Vamos a ver el cdigo: <?php class modAnyoHelper { function getArticulos( $params ) { jimport('joomla.utilities.date'); $jnow = new JDate(); $now = $jnow->toMySQL(); $db = &JFactory::getDBO(); $consulta = "select title,id from #__content where datediff( #__content.created, '".$now."' ) = 365 limit 0,30"; $db->setQuery($consulta); $categorias = $db->loadObjectList(); return $db->loadObjectList(); } } ?>

La clase helper ha de llamarse con el nombre del modulo sin _ seguido de helper, es decir, en nuestro caso seria modanyoHelper. Mediante jimport importamos el fichero necesario para instanciar una clase de tipo JDate. Jimport admite como parmetro un string que apunte al package donde se encuentre la clase. Es un concepto similar al import de java . Los paquetes se importan segn la el rbol de clases que hay en la documentacin oficial : Despus creamos el mtodo getArticulos que ser el que devuelva una lista de artculos que tengan un ao de antigedad.

Utilizamos un objeto de tipo JDatabase para realizar la consulta y despus simplemente obtenemos la lista de objetos mediante el mtodo loadObjectList . El meollo de la cuestin esta en la consulta SQL, donde se utiliza la funcin datediff para consultar los artculos con una antigedad de 365 das Finalmente , en el layout, sacamos por pantalla una lista HTML con enlaces a los artculos que se escribieron hace justo 365 das: <?php if($params->get('asignarCss')){ $css = $params->get('clase'); } ?> <ul <?php if(isset($css )){ echo 'class="'.$css.'"';} ?> > <?php foreach ($articulos as $articulo) { echo ' <li><a href="index.php?option=com_content&amp;id='.$articulo-">id.'>'. $articulo->title .'</a></li> '; } ?> </ul> Fjate que para acceder a los parmetros del fichero mod_anyo.xml se utiliza $params->get() . Estos parmetros se definen previamente en el fichero xml que acompaa el modulo. <?xml version="1.0" encoding="utf-8"?> <install type="module" version="1.5.0"> <name>Hoy hace un ao</name> <author>David Noguera</author> <version>1.5.0</version> <creationDate>30.07.2006</creationDate> <description>Modulo que carga los artculos de tal dia como hoy pero hace un ao</description> <authorEmail>david@nosolocodigo.com</authorEmail> <files> <filename module="mod_anyo">mod_anyo.php</filename> <filename>helper.php</filename> <filename>mod_anyo.xml</filename> <filename>tmpl/default.php</filename> <filename>tmpl/index.html</filename> </files> <params> <param name="clase" type="text" default="mod_anyo" label="Clase Css para el ul" description="La clase que se aplicara al ul" />

<param name="asignarCss" type="radio" default="1" label="Clase css" description="Determina si se debe asignar la clase css o no"> <option value="0">No</option> <option value="1">Si</option> </param> </params> </install>

Para finalizar solo queda meter todo esto en un zip y subirlo al instalador de Joomla!.

Вам также может понравиться