Deliverance: contentuti a domicilio
Introduzione all'uso di Deliverance per l'integrazione di differenti applicazioni web in un unico sistema web dall'aspetto grafico coerente.
Salvador dalì, Gala guarda il mar Mediterraneo che a venti metri si trasforma in ritratto di Abramo Lincoln-Omaggio a Rothko Seconda versione (1976)
Da un po' di tempo mi ronza per la testa l'idea di provare a capire come funziona e perché dovrei utilizzare un certo Deliverance. Qualcuno continua a parlarmene come ottima soluzione, sia per modificare in modo semplice lo skin di Plone, sia per integrare differenti applicazioni web in un unico contorno grafico.
Poi, finalmente, un bel giorno viene cambiato l'aspetto grafico di plone.org e, curiosando qui e là, per rendermi conto di quanto mi piacesse il nuovo skin, mi imbatto nella sezione download.
Mi accorgo subito di qualcosa di strano in questa sezione. Visualizzando il repository di Plone lo skin è sempre lo stesso ma viene visualizzato il contentuo di Trac ... sento puzza di bruciato, non avranno fatto la pazzia di modificare lo skin di Trac? impossibile, questi ragazzi sono persone serie ...
Torno un po' indietro e controllo cosa c'è di nuovo su Plone;
Ecco una news interessante; Alexander Limi mi spiega il perché e il percome del nuovo Look di plone.org e tra le varie cose interessanti, tra un cui un non ben precisato piano di conquista del mondo™, spunta nuovamente il nome di Deliverance.
Ok mi tocca andare a studiare.
Cerco un po' di documentazione e arrivo a una buona introduzione ufficiale sul perché di Deliverance; molto interessante ma non mi soddisfa; è venerdì, ho solo una o due ore di tempo per capire tutto, ci vorrebbe un how-to che mi faccia avere dei risultati in fretta.
Trovato! Nella documentazione di Deliverance trovo un bellissimo quickstart usa virtualenv, easy_install, insomma fa tutto lui (io mi posso dedicare al copia incolla avanzato).
Perfetto non funziona un tubo... non demordo e cerco il perché degli errori e finalmente approdo a una versione non ufficiale e corretta dell'how-to.
La parte per me più interessante riguarda il comando paster, che mi crea una configurazione ottimale del mio nuovo Deliverance:
$ DelivTest/bin/paster create -t deliverance DelivTest Selected and implied templates: deliverance#deliverance Basic template for a deliverance-proxy setup Variables: egg: TestEnv package: testenv project: TestEnv Enter host (The host/port to serve on) ['localhost:8000']: Enter proxy_url (The main site to connect/proxy to) ['http://localhost:8080']: Enter proxy_rewrite_links (Rewrite links from sub_host?) ['n']: Enter password (The password for the deliverance admin console) ['']: test Enter theme_url (A URL to pull the initial theme from (optional)) ['']: http://mysite.com Creating template deliverance ...
Posso già inserire un link di riferimento da cui paster andrà a scaricare il mio template grafico... voglio esagerare ne prendo uno a caso dalla rete (non è vero, non lo prendo a caso, la mia perfidia arriva a http://www.joomla.org).
Avvio il mio proxy Deliverance
$ ./bin/deliverance-proxy DelivTest/etc/deliverance.xml
punto il mio browser preferito all'indirizzo indicato a paster (localhost:8000)
e magia ... vedo lo screenshot della prima pagina del sito ufficiale di joomla.
Va bene la magia non ha funzionato torno a leggere un po' e mi imbatto nella sezione configurazione di deliverance.
Tra i file creati da paster c'è la soluzione ai miei falsi problemi.
Il file che ho indicato come base della configurazione del mio Deliverance (DelivTest/etc/deliverance.xml) contiente tutte le regole di comportamento di Deliveance e il procedimento che stà alla base è piuttosto semplice:
- una parte che definisce le impostazioni generali del server:
<server-settings> <server>localhost:8000</server> <execute-pyref>true</execute-pyref> <dev-allow>127.0.0.1</dev-allow> <dev-htpasswd>deliv-users.htpasswd</dev-htpasswd> </server-settings>
- una sezione che spiega a Deliverance dove deve pescare i contenuti: il primo verso il mio template, il secondo verso Plone:
<proxy path="/_theme"> <dest href="/it/labs/blog/giorgio-borelli/theme" /> </proxy> <proxy path="/"> <dest href="http://localhost:8080/plone" /> </proxy>
- una sezione che spiega al server dove si trova il mio tema
<theme href="http://redomino.com/_theme/index.html" />
- e infine la sezione che definisce una serie di regole per filtrare i contenuti ed eventualmente inserirli all'interno del mio tema statico.
<rule> <replace content="#main-table" theme="children:#content" nocontent="ignore"/> </rule>
Analizzando il sorgente html generato da Plone e quello definito del mio template posso trovare le corrispondenze necessarie ad includere i contenuti di Plone dentro il mio template.
In Plone esiste un div principale con id region-content che racchiude tutto il 'vero' contenuto della pagina:
es. Se visualizzo un content type Document è la parte dove verrà visualizzato, titolo, descrizione, informazioni sull'autore e la modifica ed il corpo del documento.
<div id="region-content" class="documentContent"> ... </div>
Nel mio template è presente un div corrispondente al corpo della pagina:
<div id="mainContentAreaHome"> ... </div>
appuntando questa regola in Deliverance posso sostituire il contenuto del div #mainContentAreaHome del mio template con il contenuto del div #region-content di Plone
<rule> <replace content="children:#content" theme="children:#mainContentAreaHome" /> </rule>
Da questo momento in poi il mio lavoro è semplicemente quelli di capire cosa voglio integrare del mio Plone all'interno del mio template.
Per sostituire il menu con quello di Plone posso aggiungere questa regola:
<replace content="children:#portal-globalnav" theme="children:#main-menu" />
Ricaricando la pagina all'indirizzo localhost:8000 vedrò questo risultato:
Bene da ora in poi è tutta discesa; una buona lettura della sezione rule and theme del manuale di Deliverance mi permette di creare tutto quello che voglio.
Come prima cosa voglio cambiare il template: vado in un sito dove distribuiscono templates per siti web e inizia il divertimento. In pochi minuti scarico cinque o sei template differenti e semplicemente agendo sulla configurazione di Deliverance cambio faccia al mio sito in pochi passaggi:
imposto un differente path per il template
<proxy path="/_theme"> <dest href="/it/labs/blog/giorgio-borelli/template_scaricato_da_internet" /> </proxy>
e imposto le regole del caso per l'inserimento dei contenuti di Plone nel mio template.
es.
<rule> <!-- sostituisco il corpo principale della pagina --> <replace content="children:#region-content" theme="children:#main-content" /> <!-- sostituisco il menu principale orizzontale --> <replace content="children:#portal-globalnav" theme="children:#main-menu" /> <!-- sostituisco il footer del template --> <replace content="children:#portal-footer" theme="children:#footer" /> <!-- Tolgo le informazioni sull'autore --> <drop theme="#plone-document-byline" /> </rule>
Bene fino a qui, ma se volessi veramente integrare nella stessa struttura grafica contenuti provenienti da diverse applicazioni?
Basta aggiungere alcune configurazioni in Deliverance:
<proxy path="/altro" class="default altro"> <dest href="http://localhost:8081/altroplone" /> </proxy>
con questa configurazione imposto una nuova sorgente di contenuti che sarà raggiungibile all'indirizzo localhost:8000/altro che prenderà le regole per la sostituzione dei contenuti nel template da due differenti sezioni:
- quella di default
- quella identificata con 'altro'
es.:
<rule class="altro"> <replace content="children:#region-content" theme="#main-altro" /> ... </rule> <!-- These are the default rules for anything with class="default" or no class: --> <rule> ... </rule>
Finalmente è stato risolto il mistero dell'integrazione di trac su plone.org
Devo dire che Deliverance mi ha entusiasmato. In poco tempo ho creato un sistema che integra differenti sorgenti di contenuti all'interno di un medesimo contorno grafico coerente e facilmente modificabile.
Finalmente posso avere uno skin diverso per ogni festa comandata in poco tempo e in maniera efficiente.
Grazie per il tempo risparmiato!
nemmeno a dirlo quanto posso apprezzare questo "giochino", ma attenzione a non considerarlo una panacea!
bravo Giorgio : )