mercoledì 30 aprile 2008

Javascript: Mootools e classi

Per chi non lo conoscesse Mootools è un framework Javascript creato per facilitare la scrittura di codice orientato agli oggetti garantendo altresì la compatibilità con i diversi browser.

Chi ha avuto la voglia (e la pazienza perché gli articoli erano piuttosto lunghi) di leggere quanto scritto un po' di tempo fa a proposito di programmazione a oggetti in Javascript (Javascript: Esempi di Programmazione a Oggetti, Javascript: Oggetto prototype ed ereditarietà) ricorderà come le differenze in questo campo tra Javascript e i più tradizionali linguaggi orientati agli oggetti siano notevoli.

Uno degli scopi di Mootools è proprio quello di facilitare la vita agli sviluppatori con esperienza in linguaggi quali C++, Java o PHP5 consentendo loro di programmare a oggetti in Javascript con una metodologia di lavoro ed una terminologia più familiare.

Detto così, il tutto può risultare abbastanza generico, per cui è bene passare ad un esempio concreto.

Ereditarietà in Javascript puro

Riciclo un esempio già visto nell'articolo su Javascript, prototype ed ereditarietà citato sopra

function Veicolo(passeggeri) {
 this.velocita = 0;
 this.passeggeri = 0;
 this.carica = function(passeggeri) {
   if(passeggeri > 0) {
     this.passeggeri += passeggeri;
   }
 }
 this.carica(passeggeri);
}
function Aereo(passeggeri) {
 this.carica(passeggeri);
 this.altitudine = 0;
 this.decolla = function() {
   this.velocita = 100;
   this.altitudine = 10;
 }
}
Aereo.prototype = new Veicolo();
Aereo.prototype.constructor = Aereo;

Ereditarietà con 'classi' Mootools

L'equivalente utilizzando le classi MooTools

var Veicolo = new Class({
 initialize: function(options) {
   this.options = options;
   this.passeggeri = 0;
   this.velocita = 0;
   if(this.options.passeggeri) {
     this.carica(this.options.passeggeri);
   }
 },
 carica: function(passeggeri) {
   if(passeggeri > 0) {
     this.passeggeri += passeggeri;
   }
 }
})

var Aereo = Veicolo.extend({
 initialize: function(options) {
   this.parent(options);
   this.altitudine = 0;
 },
 decolla: function() {
   this.velocita = 100;
   this.altitudine = 10;
 }
})
Fare click qui per eseguire l'esempio.

L'esempio non sfrutta che in minima parte le potenzialità del framework, però credo possa servire a vedere che aspetto ha una 'classe' Mootools.

Chiaramente si tratta di una sovrastruttura, 'sotto' c'è sempre l'ereditarietà prototipale di Javascript e non potrebbe essere diversamente. L'equivalente di ciò che in Javascript otteniamo riassegnando l'oggetto prototype, utilizzando MooTools lo si fa tramite l'oggetto Class e .extend.

Questo è solo un primo contatto avremo modo di parlare ancora di MooTools.

sabato 26 aprile 2008

Joomla 1.5: Componente per la gestione dei contatti

Joomla! da sempre include nell'installazione base un componente per la gestione dei contatti (com_contact). Il componente fa il suo onesto lavoro consentendoci di creare un numero a piacere di categorie di contatti ed inserire per ogni contatto indirizzo, numero di telefono, di cellulare, di fax e altre informazioni che possono essere pubblicate sul sito o rese consultabili solo dal backend di Joomla! Oltre a questo possiamo visualizzare un modulo che consente ai visitatori l'invio di una email al contatto direttamente dal sito web.

Può capitare (ed in effetti mi è capitato recentemente) di avere bisogno di qualche funzione in più. In questo caso si potrebbe decidere di fare delle modifiche direttamente al codice di com_contact. Così facendo si corre però il rischio di perdere tutte le modifiche fatte nell'eventualità (non tanto remota) che alcuni file del componente standard contatti siano sovrascritti da un successivo aggiornamento di Joomla!

Una strada sicuramente migliore è quella di creare un nuovo componente, derivato da com_contact. La licenze GNU/GPL di Joomla! ce lo permette purché anche il componente derivato sia rilasciato sotto licenza GNU/GPL o compatibile.

Tutto questo preambolo per presentare QContacts un componente per la gestione dei contatti alternativo a quello incluso in Joomla! e rispetto al quale presenta questi miglioramenti (almeno io li reputo tali!)

  • alcuni campi informativi aggiunti alla scheda contatto: Skype e Yahoo Messenger
  • possibilità di proteggere con un codice captcha anti-spam il modulo per l'invio dell'e-mail
  • possibilità di aggiungere campi personalizzati (massimo 3) al suddetto modulo

Non sono molte modifiche, ma erano quelle che servivano a me e spero siano utili anche ad altri, nuove funzioni potranno essere aggiunte in future versioni.

QContacts è un componente che funziona in modalità nativa in Joomla! 1.5 (quindi non potete utilizzarlo in Joomla! 1.0)

Per il codice anti-spam ho utilizzato Securimage (www.phpcaptcha.org) una libreria open source per la generazione di immagini captcha, che richiede che siano installate sul server le librerie grafiche GD2 con il supporto per i font TrueType.

Ecco il link per scaricare il componente, sul sito trovate anche le istruzioni e la documentazione

QContacts

Se ci sono problemi o suggerimenti potete lasciare un commento o contattarmi tramite il modulo contatti del sito (fatto con QContacts chiaramente).