CMS con Plone, Pubblicazione con chi vuoi!
ContentMirror ci permette di avere disponibili i contenuti plone sincronizzati in tempo reale "in chiaro" su un DB relazionale, accessibili a chiunque ne abbia bisogno, vediamo che significa.
Plone è un validissimo CMS, con buone capacità di pubblicazione dei suoi contenuti. Ciò nonostante, quando un sistema di pubblicazione puro risulta preferibile (per ottenere performance più elevate, per disaccoppiare le tipologie di accesso, per motivi di integrazione con altri sistemi, etc.), sarebbe utile poter accedere alle informazioni gestite mediante Plone in forma "diretta".
ContentMirror è ci offre una soluzione efficace e quasi indolore a tale richiesta: Kapil Thangavelu (di cui ho parlato in precedente post) utilizza gli eventi Zope per sincronizzare le informazioni contenute nel nostro portale Plone con un DB relazionale esterno a cui potremo accedere con comodo.
Ad ogni evento a cui ContentMirror si registra, le informazioni interessate vengono adeguatamente aggiornate sulle tabelle del DB. In particolare, alla creazione, modifica, eliminazione di ogni pagina, cartella, o altro oggetto del nostro portale, viene aggiornata una tabella principale chiamata content, in cui ContentMirror annota tutte le informazioni generiche dell'oggetto (id, UID, portal_type, stato di workflow, date di creazione e ultima modifica, etc.), e una tabella secondaria specifica del tipo di oggetto aggiornato. Per gli eventi, ad esempio, viene usata una tabella chiamata atevent in cui vengono annotate informazioni aggiuntive come le date di inizio e fine dell'evento o il tipo di evento.
Esistono poi alcune tabelle accessorie, quali files (dove ContentMirror immagazzina i file binari dei file e delle immagini) o relations (usta per registrare le relazioni definite fra i vari oggetti).
Insomma, chiunque volesse costruire un sito in cui pubblicare direttamente le informazioni prodotte da Plone, accedendo al DB relazionale di ContentMirror potrebbe farlo senza difficoltà, applicando le regole che preferisce (solo contenuti in un certo stato, o posizionati in una certa cartella, etc.).
Tanto per verificare fattibilità ed efficacia del modello, Andy McKay ha messo in piedi una semplice applicazione Django che fa proprio questo di mestiere: ripubblica le informazioni prodotte da Plone, accedendo alla loro "versione relazionale".
Il prodotto lo trovate qui: http://svn.clearwind.ca/public/django/plango.
Mi raccomando di leggere le istruzioni di installazione, sia di ContentMirror (http://code.google.com/p/contentmirror/source/browse/ore.contentmirror/trunk/ore/contentmirror/install.txt), che di Django-Plango (http://svn.clearwind.ca/public/django/plango/install.txt).
Vi mostro il documento sorgente in Plone:

La versione originale in Plone (ingrandisci)
E la versione acceduta da Django-Plango:

La versione dopo la cura (ingrandisci)
Chiaramente Django-Plango è solo una prova di concetto, ma facendoci un giro non e' affatto male, oltre che piuttosto semplice da personalizzare, anche per chi ancora non ha mai messo le mani su Django (alla fine non siamo troppo lontani dai concetti a cui sono abituato..).
Bene, una freccia in più al nostro arco Plone! :D
..E complimenti a Kapil e a Andy!