Il CMS? FDT! (versione 5.1)


Home Page | Commenti | Articoli | Faq | Documenti | Ricerca | Archivio | Storie dalla Sala Macchine | Contribuire | Imposta lingua:en it | Login/Register


Taaanto tempo fa, in una galassia lontana lontana, cominciai a scrivermi il mio sito internet. Dato che sono un inguaribile control-freak, decisi che il miglior modo per fare le cose e' di scrivere il tutto direttamente in HTML puro con un bell'editor di testo. Niente cazzate.

Il che va benissimo finche' si tratta di gestire un sito relativamente piccolo. Ma dopo un po' diventa un casino perche' se vuoi cambiare una virgola dell'impostazione del sito (tipo, lo stile del titolo), lo devi cambiare su tutte le pagine, il che e' lento, noioso e porta a commettere un sacco di errori.

Vabbe', e' per questo che gli esseri umani hanno inventato i 'CMS' (Content Manglement System), che altro non sono che degli editor di testo specializzati per gestire il 'contenuto' in modo tale che l'autore possa concentrarsi sullo scrivere la roba e meno sull'organizzazione della cosa.

Solo che... non sono riuscito veramente a trovarne uno che facesse quello che volevo io.

Per prima cosa, io voglio la possibilita' di dividere il mio sito in "pagine", ognuna delle quali e' un documento a se stante. Ogni pagina ha degli elementi comuni (il titolo, la barra di navigazione, magari il disclaimer in fondo e cosi' via), ma potenzialmente, ogni pagina potrebbe essere completamente diversa dalle altre.

Poi voglio potermi gestire il sito in diverse sezioni, o directory in modo da poter organizzare le cose in modo logico. Soprattutto, i documenti in una sezione dovrebbero poter essere presentati in una lista in maniera rapida. O essere presenti nella sezione ma non essere presentati nella lista dei documenti... A seconda di come mi gira e del tipo di documento.

Quasi tutti i CMS che ho visto sono dotati di un qualche tipo di editor integrato, che a me fa abbastanza cagare. Io sono abituato a scrivere off-line, magari lo stesso pezzo lo scrivo e riscrivo 10 volte e poi magari lo butto via. Quindi per me l'importante e' che il CMS mi consenta di importare un documento di testo gia' scritto.

Vabbe', non sembra una lista troppo complicata no? Solo che non sono riuscito a trovare un CMS che facesse quello che volevo io, non senza doverlo stravolgere riscrivendo da capo una buona parte di testo. A questo punto ho deciso che se volevo un CMS fatto come lo volevo io... dovevo farlo io. Il risultato e' che mi sono seduto alla tastiera ed ho scritto il mio CMS. FDT (Fai Da Te).

La prima stesura del CMS fu fatta in un paio di giorni. In effetti non usavo nemmeno un database, ogni file era un documento a se stante ed il cms vero e proprio non faceva altro che fare un merge dei vari pezzi prima di buttare tutto in pasto al browser. Ma le funzionalita' erano molto limitate ed alcune erano praticamente impossibili (la gestione dei commenti per esempio).

La seconda versione prese forma quasi subito con l'uso di un database di backend. Ed una minima interfaccia di backoffice per poter aggiungere e rimuovere documenti e cose varie. Ma ancora non ero soddisfatto.

Approfittando della pausa natalizia, ho messo insieme la versione 3.0, con parecchi miglioramenti. Migliore gestione dei documenti, un minimo di multiutenza per permettere agli altri autori di gestirsi i loro documenti ed i loro commenti, ed il CMS ha cominciato ad avere alcune fnzioni di multihosting. Ma l'interfaccia base per la gestione dei documenti non mi andava ancora bene.

Cosi' mi sono messo a riprogettare la cosa quasi da zero. Ed ha preso forma la versione 4. Ho modificato la struttura del database aggiungendo integrita' referenziale, aggiunto il threading dei commenti ed ho reso la struttura dei documenti veramente gerarchica.

Ho reso il CMS veramente multihost, con un paio di configurazioni di Apache basta aggiungere un record al db per aggiungere un intero sito internet. Ed il sistema supporta diversi utenti con diversi permessi su diversi hosts. In un host un utente puo' essere proprietario di un intero gruppo di documenti mentre in un altro puo' essere propritario dell'intero host.

Durante un'intensa sessione di debugging, mi sono anche deciso ad aggiungere un minimo supporto per l'editing on-line aggiungendo un editor Javascript. L'editor era minimale ma piacevole, cosi' l'ho lasciato. Un'altra serie di bugfixes mi ha fatto alterare la struttura del database e cosi' siamo passati alla versione 5.0.

La Versione 5.1 del CMS e' quella attualmente in produzione, e' anche quella su cui sto ancora lavorando. Caratteristiche salienti:

  1. Completamente scritto in perl
  2. Multihost
  3. Supporto multilingua
  4. Supporta multiutenza e differenti livelli di autorizzazione
  5. Documenti a struttura gerarchica
  6. Ogni documento puo' avere n links (url) che si vi si riferiscono. Un documento puo' cosi' apparire in diversi "gruppi" pur essendo solo inserito solo una volta.
  7. Editing on o off-line dei documenti
  8. Supporto CSS

Ci sono ancora parecchie cose che voglio migliorare, per esempio voglio aggiungere un po' piu' di interattivita' con l'utente, specialmente per la gestione dei documenti: io voglio poter fare il drag & drop dei documenti da una directory all'altra. Non sarebbe malre il fare drag & drop dei documenti da una applicazione direttamente al CMS... ma non esageriamo.

Come gia' detto, l'intero CMS e' scritto in perl. La versione attuale e' 5.8.8 ma e' stato provato anche su OpenBSD con 5.8.10 e non ha avuto nessun problema. Perche' ho scelto perl come linguaggio di programmazione? Perche' il 90% dei CMS in circolazione sono fatti in Php, il che significa che il 90% dei rompimarroni che potrebbero pensare di venire a rompere i marroni conoscono il php. Il che significa che, non usando php, rimuovo il 90% dei problemi subito al primo colpo.

Ho deciso di dividere il sistema in 2 parti principali: il cms propriamente detto, che e' la parte che prende il documento, lo formatta applicando il template specificato, aggiunge tutti i vari pezzi necessari e lo rifila all'utente, ed il backoffice che serve per la gestione dei documenti e che i "normali" utenti non vedono mai. Questo mi consente di ridurre al minimo i rischi impliciti nell'avere un sito dal contenuto "attivo": non c'e' nessuna istruzione "insert" da sfruttare nella parte visibile dall'utente per un eventuale attacco.

Vi sono pero' delle parti comuni alle due sopracitate: alcune funzioni sono condivise (aggiunta/modifica dei commenti, modifica delle impostazioni utente, login/registrazione). Alla fine sono solo una mezza dozzina di script in perl.

Per il controllo dei commenti ho usato SpamAssassin, con un paio di regole ad-hoc per prefiltrare i commenti. Fino ad ora solo 3 o 4 commenti "spam" hanno passato il filtro e dato che io faccio il controllo e l'approvazione a mano, zero commenti di spam hanno visto la luce del web fino ad ora.

Come "motore di ricerca" ho usate Swish, perche' ha una interfaccia integrata in Perl che mi consente di interrogare il database direttamente senza dover usare tools esterni. Questo pero' vuole dire che dovete installare anche Swish in aggiunta a tutto il resto e che dovrete farvi un cronjob o qualche cosa per re-indicizzare i siti di tanto in tanto. Il fatto che Swish sembri abbandonati dal 2002 mi fa pero' pensare che presto dovro' trovarmi qualche cosa d'altro.

Dopo molto tentennamento ho deciso di implementare CKEditor come editor "integrato" per la modifica dei documenti ed altre cose. La versione integrata e' la version 4 ma dovrebbe funzionare anche con la 5. Ho anche deciso di "estendere" la funzionalita' di "inserimento immagini" per consentire l'uso delle immagini gia' presenti nel CMS direttamente dalla maschera di editing del testo.

Putroppo, CKEditor ha la brutta abitudine di rimuovere tutte le definizioni di "classi" dal testo che sta modificando. Il che significa che se usate cose molto sofisticate nel vostro documento (un sacco di <div class=...>), avrete un sacco di problemi. E' in queste situazioni che l'editing OFF-LINE e' preferibile. Vi scaricate il testo, lo modificate a piacere con quello che vi pare e poi lo ri-uploadate. In molti casi si fa anche prima.

Nella mia concezione del sistema, il documento e' la base di tutto, il documento contiene il testo principale della pagina, quello che gli utenti vengono per leggere insomma. Tutto il resto che ci sta attorno deve essere (per l'appunto), di contorno.

Questa "documento-centricita'" si manifesta nel fatto che il 90% del mio CMS si occupa dei documenti ed il restante 10% e' per le funzioni di supporto. Detto questo, occorre dire che, se non si creano prima questi elementi di supporto, nessun documento puo' mai essere visualizzato.

Facciamo un esempio pratico, assumendo che voi abbiate gia' installato il CMS su un sistema e vogliate testarlo. Si comincia con l'aggiungere un host, cioe' un sito. Fatto cio' si crea un template. Che altro non e' che una banale pagina html dove specificate, usando <div> o <table> o quello che vi pare a voi, dove vanno posizionati i vari elementi nella pagina.

Una volta che abbiamo gli elementi basilari, e' possibile aggiungere un documento ed "agganciare" il template. Una volta fatto cio', e' possibile visualizzare il documento. Cambiando il template, cambia il modo di visualizzare il documento (non il suo contenuto). Allo stesso modo in cui cambiando il CSS associato cambiano gli stili del documento ma non le parole.

Lo stesso documento puo' essere in piu' lingua. Il CMS cerca un documento nella lingua che il browser dell'utente richiede. Se lo trova, lo visualizza. Se non trova un documento nella lingua giusta, cerca un documento nella lingua di default definita nel host. Se non trova nemmeno quello, cerca un documento in qualsiasi lingua.

I template possono essere applicati anche alla generazione di liste ed elenchi che sono prodotti automaticamente scandendo i documenti presenti in un gruppo. In questo modo e' possibile personalizzare la visualizzazione dei dati.

Per consentire la gestione di piccole parti della pagina che sono comuni ad altre pagine, ho aggiunto i frammenti, piccoli pezzi di testo disponibili in lingua che sono processati come il documento stesso. Un frammento puo' essere incluso dal template o dal documento stesso. O anche da un altro frammento. Per gestire invece elementi ancora piu' piccoli (una singola parola), si usano testi di default, che non possono includere altre cose.

Per consentire al documento o al template di fare cose come "includere" altre parti, "generare" liste ed elenchi et similia, ho usato metatags, cioe' degli pseudo-tag (comment html) che vengono elaborati dal CMS e producono un risultato.

Nella documentazione del CMS, disponibile insieme al CMS stesso sotto forma di un sito di esempio (ed ovviamente on line) c'e' un elenco di tutti i metatag con il loro significato. Oltre ad una descrizione del database ed altri particolari tecnici.

La versione 5.1 e' su SourceForge. Devo dire che ho madonnato non poco per mettere il file in download. L'interfaccia utente di sourceforge e' un gran casino. Almeno secondo me. In ogni caso, ho anche mantenuto una copia su questo sito, nell'archivio.

Attenzione! il cms e' tutt'ora in fase di sviluppo, quindi se scovate qualche baco non stupitevi troppo.

Prima di cominciare vi consiglio di leggere la documentazione, specialmente la parte relativa ai moduli Perl richiesti per far funzionare il tutto. Al riguardo una nota: durante il debugging ho installato il cms su diverse macchine (virtuali) installate 'from scratch'. L'ultima installazione su CentOS 7 ha richiesto l'uso di EPEL per alcuni moduli, ma per il resto ho fatto tutto via Yum. Non ho dovuto compilare niente a mano.

I moduli richiesti sono:

Il sistema piu' semplice per vedere se avete tutto e' provare ad eseguire doc.pl o postnew.pl dalla riga di comando. Se questo funziona significa che siete a buon punto.

Inoltre dovrete installarvi un database (MySQL o Postgre, io preferisco Postgre) ed il corrispondente modulo dbi per perl.

Se state usando la versione 5.0 del CMS dovrete cambiare UN indice in UNA tabella. Ho modificato la tabella documentcontents per constire l'inserimento di versioni del documento con lo stesso titolo. Per la modifica c'e' uno script nell directory scrips per fare il cambiamento su Postgres.

Per qualche strano motivo adesso sto' pensando di rifare tutto in Java... sara' che mi sto' rincoglionendo...

Comunquesia, le discussioni relativa al CMS le spostero' tutte sul sito specifico dedicato al CMS. Questo articolo rimane come punto di connessione tra il sito "principale" e quello del CMS.


I commenti sono aggiunti quando e soprattutto se ho il tempo di guardarli e dopo aver eliminato le cagate, spam, tentativi di phishing et similia. Quindi non trattenete il respiro.

7 messaggi this document does not accept new posts

mfisk

Possibile integrazione Di mfisk postato il 14/10/2009 09:43

Per festeggiare il seicentesimo utente, potresti integrare un'utile funzioncina, vale a dire la scelta della lingua di visualizzazione. Io uso Opera con la visualizzazione di default [en], e non c'è modo (o non l'ho scovato) di accedere alle tue pagine in italiano, se non andando a cambiare le impostazioni globali ogni volta che voglio leggerti. Cosė, sono costretto a visualizzare il sito con IE, e ciò è MALE. -- mfisk

Davide Bianchi

@ mfisk Di Davide Bianchi postato il 14/10/2009 10:08

> accedere alle tue pagine in italiano

Le pagine sono sempre visualizzate se manca l'equivalente in inglese e se tu ti configuri il browser per leggere le pagine in INGLESE devo supporre che tu LE VOGLIA in inglese, altrimenti cambiati le impostazioni del browser. E se il tuo browser non ti consente di scegliere quale lingua vuoi senza dover cambiare le impostazioni di tutto il sistema operativo o cambi browser o cambi sistema operativo.
-- Davide Bianchi

Marco

CMS FdT 4.0 Di Marco postato il 10/03/2010 17:30

Ciao, volevo utilizzare il tuo CMS e ho provato ad installarlo su macchina virtuale.
L'ho installato come da istruzioni ma qualcosa non funzionava con il il modulo doc.pl e ho visto che necessita di SWING::API.
Sulla Ubuntu Server da me utilizzata ho installato il corrispondente pacchetto (swing-e) e tutto pare andare. Con un po' di tempo cercherò di imparare...
Eventualmente, se ritieni, integra le dipendenze necessarie al funzionamento nella guida all'installazione.
Ciao. -- Marco

Davide Bianchi

@ Marco Di Davide Bianchi postato il 10/03/2010 19:59

> doc.pl e ho visto che necessita di SWISH::API.

Swish l'ho aggiunto solo dopo quando ho visto che il motore di ricerca lasciava molto a desiderare.
Aggiornero' la documentazione. -- Davide Bianchi

Alessandro Porcu

Di Alessandro Porcu postato il 12/04/2012 15:33

Installato su Gentoo va che e' una favola. Ho solo il problema di ripristinarecommenti che c'erano sul vecchio wordpress, al limite me li riscrivo a manella.

Grande BigD !!

-- Alessandro Porcu

Gandolfo Ivo

Di Gandolfo Ivo postato il 17/11/2012 23:50

Ciao BigD, mi appello alla tua Grande Saggezza per un quesito che mi attanaglia.

Ho provato a usare il tuo cms, con un discreto risultato, solo un piccolo appunto: farebbe molto comodo avere un editor online per i doc oltre che per i template, ho visto che tempo fa avevi messo FCKeditor (dalle note del SVN) ma poi lo hai tolto. Un'altra soluzione per integrare un editor c'è, oppure devo copia-incollare la funzione di edit dei template e usarla anche per i doc?

-- a little sysadmin from h3ll

Davide Bianchi

@ Gandolfo Ivo Di Davide Bianchi postato il 20/11/2012 15:06

farebbe molto comodo avere un editor online per i doc


Ho abbandonato l'editor on-line per molte cose, avevo provato con fckeditor (ora ckeditor e basta) perche' non mi soddisfava molto, potresti riaggiungerlo se vuoi madonnare.


-- Davide Bianchi

7 messaggi this document does not accept new posts

Precedente Successivo

Davide Bianchi, lavora come Unix/Linux System Administrator presso una societa' di Hosting in Olanda.

Volete contribuire? Leggete come!.
 
 

Il presente sito e' frutto del sudore della mia fronte (e delle mie dita), se siete interessati a ripubblicare uno degli articoli, documenti o qualunque altra cosa presente in questo sito per cortesia datemene comunicazione (o all'autore dell'articolo se non sono io), cosi' il giorno che faccio delle aggiunte potro' avvisarvi e magari mandarvi il testo aggiornato.


Questo sito era composto con VIM, ora e' composto con VIM ed il famosissimo CMS FdT.

Questo sito non e' ottimizzato per la visione con nessun browser particolare, ne' richiede l'uso di font particolari o risoluzioni speciali. Siete liberi di vederlo come vi pare e piace, o come disse qualcuno: "Finalmente uno dei POCHI siti che ancora funzionano con IE5 dentro Windows 3.1".

Web Interoperability Pleadge Support This Project
Powered By Gojira