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 - Realizzazione PDF Stampa E-mail
Joomla 1.5
Giovedì 05 Novembre 2009 22:47
tutorial Joomla realizzazione moduloPassiamo ad una realizzazione pratica di un modulo.
In realtà l'utilità di questo modulo devo ancora capirla io, solo mi servivano i dati di contatto direttamente nel template e ho pensato di farlo attraverso un asemplice estensione.
I contatti sono gestiti da un componente, quindi esiste già una tabella su cui fare la query. Non ho intenzione di utilizzare tutti i dati della tabella, solo i principali; inoltre un'ulteriore selezione posso farla con i parametri di configurazione del modulo. Procediamo.

Ricordate il tutorial? ...Bisogna creare una cartella mod_nome_modulo che in questo caso sarà mod_contact che conterrà:
- il file di ingresso: mod_nome_modulo.php --> mod_contact.php
- il file di configurazione e descrizione del modulo: mod_nome_modulo.xml --> mod_contact.xml
- il file che si occuperà degli script: helper.php --> 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 --> default.php

Questo sarà il pacchetto del modulo:
mod_contact
------ mod_contact.php
------ mod_contact.xml
------ helper.php
------ index.html
------ tmpl
----------- default.php
----------- index.html

I due files html, pagine bianche che impediscono la visualizzazione dei contenuti della directory qualora si tronchi la path.
##    index.html    ##

<html><body bgcolor="#FFFFFF"></body></html>



Il file mod_contact.xml, le spiegazioni sono nei commenti del codice
##  mod_contact.xml  ##

<?xml version="1.0" encoding="utf-8"?>
 <install type="module" version="1.5.0"> <!-- Tipo estensione e validazione versione Joomla-->
 <name>Box Contatti</name> <!-- Nome dell'estensione, comparirà come titolo del modulo -->
 <author>Nome Cognome</author>
 <creationDate>Novembre 2009</creationDate> 
 <version>1.0</version> <!-- Vostra versione -->
 <description>Un modulo per visualizzare una scheda contatto nella pagina</description>
 <files> <!-- Un'elenco dei file contenuti nel pacchetto -->
 <filename module="mod_contact">mod_contact.php</filename>
 <filename>index.html</filename>
 <filename>helper.php</filename>
 <filename>tmpl/default.php</filename>
 <filename>tmpl/index.html</filename>
 </files>
<!-- Questo tag merita qualche riga in più, per cui guardate il tutorial sui params -->
<!-- diciamo che normalmente, quando nn si usa qs funzione si mette un tag <params> in apertura dei vari tag <param> -->
 <params addpath="/administrator/components/com_contact/elements"> 
 <!-- Anche questa riga è impostata per funzionare con il parametro addpath, per cui rimando la spiegazione al tutorial sui params -->
 <param name="vis_id" type="contact" default="" label="Contacts" description="Scegli contatto da mostrare">
 </param>
 <!-- Il valore di param -> name è quello che recuperiamo con il metodo $params->get('name_parametro'); -->
 <!-- Il valore di param -> type è quello che determina il tipo di campo che troveremo nella configurazione -->
 <!-- in questo caso un radio button con due opzioni, nascondi e mostra -->
 <param name="vis_position" type="radio" default="0" label="Mostra posizione contatto" description="Mostra/Nasconde posizione contatto">
 <option value="0">Nascondi</option>
 <option value="1">Mostra</option>
 </param>
 <param name="vis_name" type="radio" default="0" label="Mostra nome contatto" description="Mostra/Nasconde nome contatto">
 <option value="0">Nascondi</option>
 <option value="1">Mostra</option>
 </param>
 <param name="vis_address" type="radio" default="0" label="Mostra indirizzo contatto" description="Mostra/Nasconde indirizzo contatto">
 <option value="0">Nascondi</option>
 <option value="1">Mostra</option>
 </param>
 <param name="vis_suburb" type="radio" default="0" label="Mostra provincia" description="Mostra/Nasconde provincia">
 <option value="0">Nascondi</option>
 <option value="1">Mostra</option>
 </param>
 <param name="vis_state" type="radio" default="0" label="Mostra nazione" description="Mostra/Nasconde nazione">
 <option value="0">Nascondi</option>
 <option value="1">Mostra</option>
 </param>
 <param name="vis_country" type="radio" default="0" label="Mostra paese" description="Mostra/Nasconde paese">
 <option value="0">Nascondi</option>
 <option value="1">Mostra</option>
 </param>
 <param name="vis_postcode" type="radio" default="0" label="Mostra cap" description="Mostra/Nasconde cap">
 <option value="0">Nascondi</option>
 <option value="1">Mostra</option>
 </param>
 <param name="vis_telephone" type="radio" default="0" label="Mostra telefono" description="Mostra/Nasconde telefono">
 <option value="0">Nascondi</option>
 <option value="1">Mostra</option>
 </param>
 <param name="vis_fax" type="radio" default="0" label="Mostra fax" description="Mostra/Nasconde fax">
 <option value="0">Nascondi</option>
 <option value="1">Mostra</option>
 </param>
 <param name="vis_misc" type="radio" default="0" label="Mostra dati aggiuntivi" description="Mostra/Nasconde dati aggiuntivi">
 <option value="0">Nascondi</option>
 <option value="1">Mostra</option>
 </param>
 <param name="vis_image" type="radio" default="0" label="Mostra immagine contatto" description="Mostra/Nasconde immagine contatto">
 <option value="0">Nascondi</option>
 <option value="1">Mostra</option>
 </param>
 <param name="vis_email_to" type="radio" default="0" label="Mostra indirizzo email" description="Mostra/Nasconde indirizzo email">
 <option value="0">Nascondi</option>
 <option value="1">Mostra</option>
 </param>
 <param name="vis_mobile" type="radio" default="0" label="Mostra Nro cellulare" description="Mostra/Nasconde Nro cellulare">
 <option value="0">Nascondi</option>
 <option value="1">Mostra</option>
 </param>
 <param name="vis_webpage" type="radio" default="0" label="Mostra la pagina web" description="Mostra/Nasconde la pagina web">
 <option value="0">Nascondi</option>
 <option value="1">Mostra</option>
 </param>
 </params>
</install>


File di ingresso mod_contact.php
##  mod_contact.php ##
// Si occupa di collezionare i dati necessari e di fornire un output

// vietato 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
$contacts = modContactHelper::getContact( $params );

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


File helper.php
##  helper.php ##

<?php

class modContactHelper{

 function getContact( $params ){
 
 if($params->get( 'vis_id' ) >= 1){

 $db    = &JFactory::getDBO();  // creo l'oggetto db

 $query = "SELECT *
 FROM #__contact_details
 WHERE id = " . (int)$params->get( 'vis_id' );
 
 $db->setQuery($query);  // esegue la query
 
 $contactrows = $db->loadObjectList();   // raccoglie i risultati della query in un array associativo

 return $contactrows;
 }
 return null;
 }
}



E ora il template tmpl/default.php, in cui metto i risultati all'interno di div con un contenitore esterno costituito da un'ulteriore div
File default.php
##  default.php ##

<?php defined( '_JEXEC' ) or die( 'Non puoi accedere' ); ?>

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

foreach ( $contacts as $row ) {

 if($params->get( 'vis_position' ) && $row->con_position != ""){   // Se è configurato mostra, quindi 1 e se è stata restituita una riga della query
 echo "<div class=\"item_position\">" . $row->con_position . "</div>";
 }

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

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

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

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

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

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

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

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

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

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

 if($params->get( 'vis_email_to' ) && $row->email_to != ""){
 $row->email_to = JHTML::_('email.cloak', $row->email_to);
 echo "<div class=\"item_email\">" . $row->email_to . "</div>";
 }

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

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

echo "</div>";



Terminato! Se non ricordate come fare per create il pacchetto installabile e come installarlo, rileggete il tutorial sui moduli
Oppure vi potere riferire al tutorial docs.joomla
 
 
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