Tutorial: scrivere un modulo per Joomla

Questo tutorial illustra come scrivere un modulo di Joomla che permetta, data una sezione ed una categoria, di elencare in un box i cinque articoli con data di scadenza più vicina.

Supponiamo di avere una sezione "Eventi", categoria "Eventi sportivi". Vogliamo conoscere quali sono i prossimi cinque eventi sportivi in ordine di tempo. La definizione degli eventi deve prevedere di inserire una data di scadenza dell'evento, dopo la quale l'articolo viene rimosso. Questa è la data di "Finish Publishing" nel backend di Joomla.

Prendiamo come punto di partenza il modulo più semplice che viene fornito nell'installazione di Joomla, mod_related_items. Aprire la cartella joomla/modules/ e copiare mod_related_items.php e mod_related_items.xml. Li copiamo e ne cambiamo il nome in mod_prossimi_eventi.php e mod_prossimi_eventi.xml.

A questo punto apriamo questi due files con un editor e ci prepariamo a modificarli.

Il file .xml presenta dei parametri che sono utili per identificare il modulo. Dobbiamo cambiare alcuni dei valori indicati.

Ecco un esempio di come risulterà questo file:


<?xml version="1.0" encoding="iso-8859-1"?>
<mosinstall type="module" version="1.0.0">
<name>Prossimi Eventi</name>
<author>Copes Flavio</author>
<creationDate>May 2007</creationDate>
<copyright>(C) 2005 Open Source Matters. All rights reserved.</copyright>
<license>http://www.gnu.org/copyleft/gpl.html GNU/GPL</license>
<authorEmail>copesc@gmail.com</authorEmail>
<authorUrl>www.copesflavio.com</authorUrl>
<version>1.0.0</version>
<description>Visualizza i prossimi 5 eventi sportivi.</description>
<files>
<filename module="mod_prossimi_eventi">mod_prossimi_eventi.php</filename>
</files>
<params>
<param name="cache" type="radio" default="0" label="Enable Cache" description="Select whether to cache the content of this module">
<option value="0">No</option>
<option value="1">Yes</option>
</param>
<param name="moduleclass_sfx" type="text" default="" label="Module Class Suffix" description="A suffix to be applied to the css class of the module (table.moduletable), this allows individual module styling" />
</params>
</mosinstall>

A questo punto apriamo il file mod_prossimi_eventi.php.

Scorriamo il file fino alla riga if ($option == 'com_content' && $task == 'view' && $id)
cancelliamo tutto il contenuto, if compreso, e lo sostituiamo con

$query = "SELECT a.id, a.title, a.sectionid, a.catid, cc.access AS cat_access, s.access AS sec_access, cc.published AS cat_state, s.published AS sec_state"
. "\n FROM #__content AS a"
. "\n LEFT JOIN #__content_frontpage AS f ON f.content_id = a.id"
. "\n LEFT JOIN #__categories AS cc ON cc.id = a.catid"
. "\n LEFT JOIN #__sections AS s ON s.id = a.sectionid"
. "\n WHERE a.state = 1"
. "\n AND a.access <= " . (int) $my->gid
. "\n AND sectionid=5 AND catid=15"
. "\n AND publish_down > NOW() AND publish_down <> '0000-00-00 00:00:00'"
. "\n GROUP BY publish_down desc limit 5;"
;
$database->setQuery( $query );
$temp = $database->loadObjectList();
$prossimi = array();
if (count($temp)) {
foreach ($temp as $row ) {
if (($row->cat_state == 1 || $row->cat_state == '') && ($row->sec_state == 1 || $row->sec_state == '') && ($row->cat_access <= $my->gid || $row->cat_access == '') && ($row->sec_access <= $my->gid || $row->sec_access == '')) {
$prossimi[] = $row;
}
}
}
unset($temp);
if ( count( $prossimi ) ) {
?>
<ul>
<?php
foreach ($prossimi as $item) {
if ($option="com_content" && $task="view") {
$Itemid = $mainframe->getItemid($item->id);
}
$href = sefRelToAbs( "index.php?option=com_content&task=view&id=$item->id&Itemid=$Itemid" );
?>
<li>
<a href="<?php echo $href; ?>">
<?php echo $item->title; ?></a>
</li>
<?php
}
?>
</ul>
<?php
}

Cosa significa questa parte di codice? Eseguo una query SQL in cui vado a prendere i prossimi 5 eventi, caratterizzati da un id sezione 5 ed id categoria 15, e li visualizzo in una lista non ordinata.

Il risultato sarà una cosa di questo tipo:

Risultato modulo joomla

Qui vengono visualizzati solo due eventi in quanto ne ha trovati solo due nel database.

Naturalmente il modulo va poi installato ed assegnato ad una voce di menu, come tutti gli altri.

Tags: , , , , ,
Articoli correlati:

Lascia un commento

Nome (obbligatorio)

Mail (non sarà pubblicata) (obbligatoria)

Sito web

-->