|
Joomla 1.5
|
|
Giovedì 05 Novembre 2009 22:47 |
Passiamo 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 |