Clusit-Associazione Italiana per la Sicurezza Informatica
Il mio profilo su Linkedin
Il mio spazio su YouTube
Joomla Italia
Il mio profilo su vololibero.net
 
Album Picasa
 
Sviluppare un modulo - Concetti base PDF Stampa E-mail
Joomla 1.5
Giovedì 05 Novembre 2009 22:47
tutorial Joomla sviluppare moduloUn modulo ha il compito di restituire alla visualizzazione della pagina contenuti provenienti da componenti, elaborazioni di dati prelevati dalle tabelle del database(es. visite al sito), dall'esterno appoggiandosi a servizi (es. you tube).
Si occupa di inserire nel modello di Joomla dei contenuti generati dagli script che li gestiscono, inseriti in file che rispettino il modello di costruzione di una directory "mod_". Complicato? Niente affatto, in fondo si tratta dei soliti 4+2 files. Si potrebbe ridurre tutto ai soli due file di ingresso, nome_modulo.php e configurazione nome_modulo.xml, ma vedrete che ricorrere ai metodi già disponibili vi consente sin da subito di creare moduli avanzati, con classi che estendono o con un template.
Innanzitutto bisogna creare una cartella mod_nome_modulo che conterrà:
- il file di ingresso: mod_nome_modulo.php
- il file di configurazione e descrizione del modulo: mod_nome_modulo.xml
- il file che si occuperà degli script: helper.php
- il file che si occuperà del codice che raccoglie i contenuti da far apparire nella pagina (all'interno della cartella tmpl): default.php

Riassumendo, abbiamo costruito questa situazione:
mod_nome_modulo (folder)
------| mod_nome_modulo.php
------| mod_nome_modulo.xml
------| helper.php
------| index.html
------ tmpl (folder)
-----------| default.php
-----------| index.html

La parte più semplice sono i due files html, pagine bianche che impediscono la visualizzazione dei contenuti della directory qualora si tronchi la path.
Uno si posiziona nella root del modulo e uno nella cartella tmpl. Questo il codice da inserire:
## file -> index.html ##
<html><body bgcolor="#FFFFFF"></body></html>


Il file xml sarà così composto:
## file -> mod_nome_modulo.xml ##
<!-- Si occupa di istruire il Joomla installer e di preconfigurare il modulo -->

<!-- Questa prima parte contiene i dati che visualizzeremo in amministrazione nella parte moduli installati -->
<?xml version="1.0" encoding="utf-8"?>
<install type="module" version="1.5.0">
 <name>Nome del modulo</name>
 <author>Autori del modulo</author>
 <creationDate>Data di realizzazione</creationDate> 
 <version>x.x.xx</version>
 <description>Descrizione delle features del modulo</description>

<!-- Questa parte descrive i files e la loro path rispetto il modulo dei files che compongono il modulo stesso -->
 <files>
 <filename module="mod_nome_modulo">mod_nome_modulo.php</filename>
 <filename>index.html</filename>
 <filename>helper.php</filename>
 <filename>tmpl/default.php</filename>
 <filename>tmpl/index.html</filename>
 </files>

<!-- Se volessimo inserire anche la gestione della lingua -->
<languages>
 <language tag="it-IT">it-IT.mod_nome_modulo.ini</language>
 </languages>


<!-- Qui iniziano i parametri di configurazione, ovvero i settaggi che facciamo all'interno della gestione moduli che poi recuperiamo negli script sotto forma di array params -->
<params>
 <param name="nome_parametro" type="radio" default="0" label="Tua etichetta" description="Tua descrizione del parametro">
 <option value="0">Nascondi</option>
 <option value="1">Mostra</option>
 </param>

 <!-- Possiamo anche settare un suffisso per la classe -->
 <param name="moduleclass_sfx" type="text" default="" label="Module Class Suffix" description="PARAMMODULECLASSSUFFIX" />
 </params>
</install>


Poi abbiamo il file di ingresso:
## file -> mod_nome_modulo.php ##
// Si occupa di collezionare i dati necessari e di fornire un output

// vieta l'accesso diretto a qs file
defined('_JEXEC') or die('Accesso negato');

// inclusione dell'helper con la classe che si occupa della raccolta dati
require_once( dirname(__FILE__).DS.'helper.php' );

// chiamata alla classe contenuta in helper.php
$miavar = modNomeModuloHelper::getNomeModulo( $params );

// restituzione alla pagina
require( JModuleHelper::getLayoutPath( 'mod_nome_modulo' ) );


L'ultimo di questa root è helper.php
## file -> helper.php ##
// Come vediamo quì sotto è quello che contiene la classe e il metodo che andremo a chiamare nel file di ingresso
// Si occuperà di eseguire query e script per il recupero dei dati

class modContactHelper{

 function getContact( $params ){
 
 // la cosa più semplice era fare una query

 $db    = &JFactory::getDBO(); // Oggetto db

 $query = "SELECT * FROM #__miatabella"; // Imposto la query
 
 $db->setQuery($query); // la eseguo
 
 $rows = $db->loadObjectList(); // recupero i dati in un'array
 
 return $rows; // Li restituisce all'esecuzione
 }
}


A questo punto entriamo nella cartella tmpl, abbiamo un solo file nel nostro esempio minimale, default.php: è il "piccolo template" che spediremo all'output tramite l'apposito metodo (vedi file ingresso).

## file -> tmpl/default.php ##
// Recuperiamo l'array della query con il metodo creato e aggiungiamo un minimo di tag ai nostri contenuti
// Faccio un'ipotetico recupero e uso, ma capito il meccanismo, potete fare ciò che volete,
// volendo potete recuperare i dati ed elaborarli anche all'interno della classe di helper.php,
// elaborerete ugualmente in questa pagina il ritorno del metodo di helper chiamato nel file di ingresso

//Solito divieto di accesso diretto
<?php defined( '_JEXEC' ) or die( 'Non puoi accedere' ); ?>

<?php
echo "<div id=\"mybox\">";

foreach ( $rows as $row ) {

 if($params->get( 'parametro1_dell_xml' ) && $row->myvalue1 != ""){
 echo "<div class=\"item\">" . $row->myvalue1 . "</div>";
 }

 if($params->get( 'parametro2_dell_xml' ) && $row->myvalue2 != ""){
 echo "<div class=\"item\">" . $row->myvalue2 . "</div>";
 }

}

echo "</div>";


Bene, finito! Non rimane che zippare la cartella principale e procedere con l'upload e l'installazione attraverso l'interfaccia amministrativa del sito.
Estensioni -> Installa -> Carica file e installa -> puntare la cartella zippata -> esegui
Se l'installazione va a buon fine, viene segnalato dall'installer di Joomla, così pure il fallimento. Per quest'ultimo, il motivo può essere solo che non avete rispettato i nomi di file e/o cartelle, non avete rispettato il modello del pacchetto, c'è qualche errore o tag non chiuso nel file xml che è quello che viene letto dall'installer.
Rimanendo in questa pagina di amministrazione, cliccate sul link moduli installati, se avete compilato correttamente il file xml, i dati che avevate messo, ve li ritrovate come riga della tabella dei moduli.

Ora dovete passare a Gestione moduli, per configurarlo, attivarlo e assegnargli la posizione nel template.
Se ci sono errori nel codice ve ne accorgete ritornando al lato pubblico, lo script di installazione non verifica l'esattezza del codice.
Abilitate il debug e risolvete i problemi, solo dopo mettetelo in produzione. Non testate assolutamente estensioni su un sito esposto al web, rischiate di mostrare dati riservati a chi vi visita nel momento di un'errore, che spero siano comunque gestiti negli script del modulo che scrivete.
 
 
Questo sito è dedicato alla mia ed altrui curiosità, come primordiale bisogno di conoscere, capire nella sua complessità ogni cosa. Questo sito è basato sul framework Joomla1.5.xx!. Ogni contenuto o script pubblicato è di libera consultazione e duplicazione purchè se ne citi la fonte. Clicca qui per votare