Back to top

appuntiLa famigli dei CMS Open Source è molto ampia, tuttavia se cerchiamo stabilità, performance e requisiti tecnici nella media la scelta si restringe a poche opzioni.

In passato la selezione del CMS "giusto" era legata principalmente ai requisiti del progetto, ma al giorno d'oggi questo parametro di scelta non è più così efficace, visto che il paradigma dell'estendibilità ha spinto i CMS più popolari verso un modello che prevede un un sistema core estendibile con plugin che asseconda virtualmente ogni requisito.

Scegliere il CMS più adatto diventa allora una questione di "modelli mentali": scegliamo quello che incarna meglio la nostra idea di come una applicazione web dovrebbe funzionare e di cosa dovrebbe offrire ad utenti e amministratori.

In questo articolo esploreremo le principali differenze fra i modelli mentali di Wordpress e Joomla relativamente ai temi e all'estensione del core.

 

 

Introduzione

Wordpress e Joomla sono due fra i CMS Open Source più popolari fra gli sviluppatori. Offrono un'estesa documentazione e sono animati da comunità molto ampie.

Wordpress è solitamente la scelta prediletta dei designer, soprattutto per il suo backend amministrativo ben progettato e per la disponibilità di molti temi di qualità.

D'altro canto, Joomla soffre ancora della pesante eredità di Mambo, che ne ha alimentato la cattiva reputazione relativamente alle basse performance, all'output HTML tabellare e semanticamente errato. Nonostante questa cattiva reputazione sia ancora molto solida, a partire dalla versione 1.5 Joomla offre un core completamente riscritto, estendibile e che genera HTML semantico.

Uno degli aspetti che rende differenti Wordpress e Joomla è il loro modello di gestione dei temi. Dal punto di vista dello sviluppatore, questa differenza genera due sentimenti contrastanti: per chi passa da Joomla a Wordpress che quest'ultimo richieda troppo codice, mentre enl caso contrario che Joomla sia troppo poco flessibile e personalizzabile.
La ragione di questi sentimenti risiede nelle differenze fra i due modelli mentali alla base del sistema di sviluppo dei temi.

Il modello di Wordpress

Il modello di sviluppo dei temi in Wordpress è basato essenzialmente su una struttura a viste. Questo sta a significare che per ogni tema ci potrebbe essere una file di vista per la lista dei post, la vista singola, e le pagine di archivio. Questi file sono independenti l'uno dall'altro, permettendo allo sviluppatore di personalizzare ogni vista ma obbligandolo anche a duplicare molte parti di codice, visto che le uniche parti condivise (perlatro in maniera opzionale) sono l'header e il footer.

Il problema principale di questo modello è che non sempre diverse viste richiedono una specifica presentazione (archivi, liste di categorie e di tag sono comunque liste). Per risolvere questo problema ogni tema è organizzato secondo una struttura gerarchica in cui le viste più generiche sono usate come rimpiazzo (fallback) per quelle più specifiche. Il fallback comune per un tema Wordpress è il file index.php che è quindi l'unico file richiesto (insieme al foglio di stile) in un tema. Un riferimento completo e un diagramma della struttura gerarchica dei file di vista di Wordpress è disponibile qui.

Il loop è i template tags

Per capire più a fondo come funziona un tema Wordpress, è necessario introdurre i concetti di "the loop" e di template tags.

Il primo è il ciclo attraverso il quale vengono estratti i dati di ogni post (o lista di post), e si compone praticamente di un ciclo while simile a questo:

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
// output dei dati del post
<?php endwhile; endif; ?>

 

La parte fondamentale di questo codice è rappresentata dalla funzione the_post(), che inizializza un oggetto PHP globale $post che contiene tutti i dati della pagina. Visto che tutte le funzioni per la visualizzazione e formattazione dei dati si appoggiano all'oggetto $post, il loop è necessario anche per visualizzare un singolo post. Le funzioni di questo tipo sono chiamate template tags è hanno principalmente il compito di stampare dati formattati. Solitamente l'output non contiene codice HTML, visto che possono essere usate in scenari differenti.

Per una guida completa sullo sviluppo dei temi fte riferimento a questo indirizzo.

Joomla: un modello basato "sui contenuti"

Rispetto a Wordpress, Joomla presenta un approccio molto diverso per la realizzazione dei temi. In Joomla i template sono costruiti su una struttura comune definita nel file index.php.
Questo file contiene sia il codice HTML statico (che è quindi condiviso da tutte le pagine del sito) che dei template tag che sono dei segnaposti per i blocchi di contenuto che verranno generati dinamicamente dal CMS.

Un esempio concreto di template tag è:

<jdoc:include type="modules" name="right" style="xhtml" />

La differenza principale fra i vari template tag sta nel tipo di contenuto che li sostituirà : component, message, module, head.

Il principale vantaggio di questo modello a struttura comune è che non si deve scrivere l'intero template di pagina per ogni vista ma solo il codice strettamente necessario. A prima vista si potrebbe pensare che questo vada a discapito delle possibilità di personalizzazione, visto che il CMS ha già un output di default per ogni blocco di contenuto. In realtà Joomla è basato sul modello Model View Controller, secondo cui l'estrazione e manipolazione dei dati sono separate dalla loro presentazione, che è affidata al componente view.

Personalizzazione dei template

Per personalizzare la vista di default, Joomla offre un sistema chiamato template override, attraverso il quale il sistema ricerca una vista personalizzata all'interno di una specifica cartella del template, per poi ricadere su quella di default nel caso non venisse trovato nulla. L'immagine qui sotto mostra un esempio della struttura e della convenzione di denominazione delle cartelle in un template override nel tema ja_purity.

Gli override sono una delle feature più potenti ed utili di Joomla per ottenere temi personalizzati senza dover modificare il codice dei componenti. Il vero problema è che molte estensioni (anche famose come Virtuemart) hanno un sistema di template proprio o addirittura mescolano logica e presentazione in un unico file.

Per chi volesse approfondire il tema è presente una documentazione dettagliata sul sito ufficiale .

Oltre il "nativo"

Negli ultimi anni il concetto di plugin ha fatto la differenza nel panorama dei software, ne è prova il progetto Mozilla FIrefox.
Come detto in precedenza, tutti i CMS moderni hanno adottato questo concetto, offrendo una serie di funzionalità definite native (utenti, articoli ecc.) e vari sistemi per aggiungere funzionalità ulteriori, realizzando così un sistema modulare che è risultato vincente per vari motivi:

  • Migliore aggiornabilità: gli sviluppatori non devono mettere mano al core per aggiungere funzionalità.
  • Sistema leggero e più sicuro: includendo solo alcune funzioni il codice è più snello ed il sistema è reso più leggero e sicuro.
  • Cicli di svilupop separati per il core e le caratteristiche aggiuntive: offrendo un sistema di estendibilità, molti più sviluppatori possono realizzare estensioni autonome, mentre il team di sviluppo principale può focalizzarsi sul core, sulla sua stabilità e sicurezza.

Per i progetti Open Source Projects quest'ultimo punto è sia una forza che un pericolo, traducendosi in un lavoro di sviluppo distribuito ma anche nell'impossibilità di verificare tutto il codice prodotto dalla community.
Joomla e Wordpress hanno cercato di rimediare al problema con la creazione di linee guida di sviluppo.

Al di là del modo in cui le estensioni sono chiamate, i modelli di estendibilità di Wordpress e Joomla presentano alcune differenze sostanziali relativamente alle modalità di implementazione offerte. La chiave per comprendere i due modelli di estendibilità è che mentre Joomla è basato sul modello MVC, Wordpress poggia su un sistema ad eventi al quale le estensioni vengono agganciate (hooked).

Wordpress e gli hook

Sia il core che il modello di estendibilità di Wordpress sono basati sull'esecuzione a cascata di una serie di funzioni agganciate al sistema attraverso dei cosiddetti hook.

Gli Hook contengono una lista di funzioni che sono lanciate in vari momenti durante l'esecuzione del CMS per manipolare (filter hook) o stampare (action hooks) dei dati. Tale lista di funzioni può essere controllata anche a partire dal tema stesso o da file specifici denominati plugin.
Sebbene Wordpress non offra una documentazione dettagliata degli hook disponibili, una lista abbastanza completa è disponibile qui.

Per capire meglio il modello mentale alla base dell'uso degli hook, potremmo paragonarlo alla serie di azioni necessarie per fare una torta: all'inizio abbiamo un'idea abbastanza precisa della torta che volgiamo fare, quindi raccogliamo gli ingredienti che ci servono. A questo punto non possiamo semplicemente prendere tutto e buttarlo in forno, ma dobbiamo procedere secondo una specifica lista di azioni come filtrare i gusci delle uova e mescolare il risultato con farina e zucchero. nel frattempo potremmo voler personalizzare la ricetta, così potremmo aggiungere (plug-in) della cioccolata e magari dimezzare la quantità di un altro ingrediente. Il prodotto risultante è una torta ben preparata, realizzata a partire da ingredienti distinti e un tocco di creatività.

Sidebar e Widget

Nella terminologia di Wordpress, un widget è un tipo particolare di plugin che ha il compito di mostrare dei dati nella sidebar di un tema. Il vantaggio principale dei widget è che solitamente sono configurabili ed ordinabili direttamente dall'interfaccia di amministrazione, rendendone la gestione molto facile anche da parte di utenti poco esperti.

 

Dal punto di vista dello sviluppo, il modello mentale delle sidebar è molto simile a quello dei template tag di Joomla: è un segnaposto per del contenuto. Quello che invece è fuorviante del nome, è che non per forza questo segnaposto deve trovarsi in una posizione laterale: potrebbe anzi essere dislocato in un footer, un header o fra due blocchi di contenuto.

La documentazione ufficiale di Wordpress offre una panoramica esaustiva sull'argomento.

Aggiungere funzionalità

Il problema con Wordpress (almeno fino alla versione 3), è che non è facile aggiungere funzionalità complesse, come carrelli di e-commerce o calendari di eventi. Molti sviluppatori hanno spiegato la cosa a partire dalla natura di blog engine di Wordpress.

Estendere Joomla

Una caratteristica spesso sottovalutata di Joomla è che è costruito su un solido framework MVC e di conseguenza la progettazione di estensioni è molto simile alla implementazione di applicazioni in Zend Framework e CodeIgniter, con il vantaggio non indifferente di avere a disposizione un backend preimpostato nel quale integrare le nuove funzionalità.
L'approccio di Joomla permette inoltre di estendere l'uso dei template override anche alle estensioni.

Per chi fosse interessato ad approfondire il funzionamento del framework MVC di Joomla, sul sito ufficiale è disponibile una documentazione esaustiva.

I tipi di estesione in Joomla

Le estensioni di Joomla si suddividono in tre grandi gruppi che differiscono per finalità: componenti, moduli e plugin.

I componenti estendono il core aggiungendo nuove funzionalità, come carrelli e-commerce, calendari o forum. Dal punto di vista di un utente, possono essere identificati come sezioni indipendenti del sito. Un componente molto diffuso è, ad esempio, JEvents, un calendario eventi.

All'interno di un template, il codice generato da un componente si colloca al posto del template tag component:

<jdoc:include type="component" />

I moduli sono come i widget in Wordpress: mostrano i record di un componente estraendoli dal database. Sono posizionabili in una qualsiasi module position e possono essere inseriti in ogni pagina.

I moduli sono pensati come delle anteprime dei contenuti, ma possono anche presentare testi e gallerie di immagini, risultando utili per creare parti statiche del sito come i footer. In molti siti vengono utilizzati per creare riferimenti incrociati fra varie sezioni di contenuto, ad esempio mostrando software per sviluppatori e designer nella sezione barcamp di un calendario eventi.

Ecco un esempio dei template tag che identifica la posizione di un modulo:

<jdoc:include type="modules" name="right" style="xhtml" />

I plugin si basano su un sistema molto simile a quello degli hook di Wordpress in quanto si agganciano a specifici eventi di sistema per formattare, manipolare e filtrare l'output del CMS. I campi d'azione di un plugin spaziano dal contenuto di un articolo (come per plugin video tipo AllVideos) alla pulizia del codice HTML filtering e all'estensione del profilo utente. Altri plugin molto usati si occupano della riscrittura degli URL.

Compatibilità

Un aspetto che ogni sviluppatore dovrebbe aver presente è che, nonostante gli sforzi per offrire una struttura MVC flessibile e pulita, Joomla 1.5 supporta a tutt'oggi anche le estensioni per la versione 1.0, che non sono facilmente personalizzabili e non seguono il modello MVC.

La libreria di estensioni di Joomla permette di distinguere chiaramente fra le estensioni native 1.0 e 1.5, tuttavia non è molto difficile crackare il sistema rendendo nativa 1.5 una vecchia estensione. Purtroppo anche progetti diffusi come Virtuemart ricorrono a questo stratagemma.

Per fortuna, quando Joomla 1.6 sarà rilasciato definitivamente, sarà abbandonata la retrocompatibilità con le estensioni 1.0 e forse tutti gli sviluppatori saranno costretti a riscrivere il proprio codice secondo il modello MVC del CMS.

E adesso?

Anche se il modo migliore per scegliere un CMS è quello di provarlo "sul campo", conoscerne il modello mentale alla base è importante per sentirsi meno persi nel primo approccio con il codice e per chiarire quali siano le procedure per aggiungere funzionalità e realizzare i template.

Di seguito alcune risorse per approfondire le tematiche trattate (in inglese).

Wordpress:

Joomla:

commentaCommenta questo articolo sul forum

Ricerca su Joomla.it

...per il tuo dispositivo mobile

Naviga Joomla.it da dispositivi mobili
kreatif-multimedia-logo