Progettazione e Sperimentazione
di un Framework Estensibile per
Applicazioni Web
A Elisa
-2-
S o m ma ri o
Sommario ...................................................................................... 3
1. Introduzione ............................................................................. 6
1.1. Obiettivi.............................................................................. 6
1.2. Storia ................................................................................. 6
1.3. Organizzazione del lavoro ................................................... 7
1.4. Struttura dell’elaborato........................................................ 8
2. Analisi .................................................................................... 10
2.1. Definizioni ........................................................................ 10
2.1.1. Cos’è un Content Management System (CMS) ................... 10
2.1.2. Cos’è un Framework......................................................... 11
2.2. Tratti comuni: così fan tutti ................................................ 12
2.3. Tratti distintivi: analisi dei vari motori................................. 13
2.3.1. PHPNuke ......................................................................... 14
2.3.2. Xoops .............................................................................. 16
2.3.3. Mambo ............................................................................ 18
2.3.4. Drupal.............................................................................. 19
2.3.5. WordPress ....................................................................... 20
3. Requisiti del sistema phpGolem............................................ 22
3.1. Linee guida....................................................................... 22
3.2. Tipologie di utenti ............................................................. 24
3.2.1. Framework developer ....................................................... 24
3.2.2. Framework user ............................................................... 25
3.2.3. Backoffice user ................................................................ 25
3.2.4. Public site user................................................................. 26
3.3. Requisiti di architettura ..................................................... 26
3.4. Requisiti di usabilità e interfaccia ...................................... 28
3.5. Requisiti tecnici ................................................................ 29
4. Architettura generale del sistema ......................................... 31
4.1. Architettura....................................................................... 31
4.2. Database.......................................................................... 33
-3-
-4-
-5-
1 . I n t ro d uzi o n e
1.1. Obiettivi
In internet esistono numerosissimi software per la gestione di siti web
di piccole, medie o grandi dimensioni. Questi programmi sono
denominati, in rapporto al loro approccio al problema, Content
Management Systems (CMS) oppure Frameworks.
1.2. Storia
Il software qui esposto è denominato phpGolem. Ha preso avvio nel
giugno 2003 con scopi molto limitati e centrati ad hoc per un portale
web.
-6-
-7-
Nella prima parte, Analisi (cap 3), verrà quindi esposta la tipologia di
programma software che è stata sviluppata, cioè il significato di
framework estensibile e di content management system, con i loro
contesti applicativi.
Verranno quindi analizzati i tratti fondamentali che sono comuni a
questi tipi di sistemi in modo da delineare quali siano i punti
imprescindibili che bisogna tenere in considerazione. In più verrà fatto
un breve passaggio sui vari sistemi opensource attualmente
disponibili che rientrano in questa categoria, così da avere una base
di implementazioni sulle quali ragionare e valutare i pro e i contro di
ciascuna.
-8-
Viene poi posto un accento sulla prospettiva utente nella parte User
View (cap 6), dove vengono descritte le principali funzionalità che il
CMS, basato sul framework phpGolem, mette a disposizione.
Questo viene fatto tramite un approccio descrittivo non troppo tecnico,
che si rivolge ad un utente non esperto, spiegando come svolgere le
principali operazioni.
-9-
2 . A n al is i
2.1. Definizioni
Prima di delineare come è stato progettato phpGolem, è meglio avere
una panoramica sul contesto nel quale si inserisce.
Tradotto da en.wikipedia.org:
Nell’informatica, un content management system (CMS) è un
sistema utilizzato per organizzare e rendere semplice la
creazione collaborativa di documenti e altri contenuti. Un CMS è
frequentemente una applicazione web utilizzata per gestire siti e
contenuti, anche se in alcuni casi dei CMS richiedono del
particolare software client installato su un computer per
modificare e realizzare articoli.
- 10 -
Tradotto da en.wikipedia.org:
Nello sviluppo software un framework è una specifica struttura di
supporto all’interno della quale un altro software può essere
organizzato e sviluppato. Un framework può includere programmi
di supporto, librerie di codice, linguaggi di scripting o altri
- 11 -
software per aiutare nello sviluppo e funziona come colla fra i vari
componenti di un progetto software.
- 12 -
- 13 -
2.3.1. PHPNuke
Questo uno dei motori più antichi e diffuso sul web. Si tratta di un
progetto nato in modo amatoriale da parte di uno sviluppatore intorno
all’anno 2000. E’ stato uno dei pionieri per quanto riguarda i sistemi
CMS opensource e per questo risulta avere un’enorme diffusione.
Il codice però è stato scritto nel 2000 con le conoscenze del periodo
dell’autore, cosa che comporta evidenti idiosincrasie strutturali e un
codice sporcato da moltissime pezze e aggiustamenti. Lo stesso
sistema a moduli risulta essere di difficile gestione (per quanto sia un
notevole passo avanti ai tempi) e facilmente intaccabile da
vulnerabilità di vario tipo.
Inoltre, dal punto di vista tecnico vi sono moltissime riscritture di
codice e la mancanza di un sistema centralizzato di gestione: vi sono
numerose tipologie funzionali (index, blocks, admin, moduli, …) ed
- 14 -
- 15 -
2.3.2. Xoops
Questo è un programma di gestione per portali di piccole o medie
dimensioni, e persegue il fine parallelo di essere un CMS (come loro
stessi spiegano nei dettagli del loro progetto). Sfrutta il concetto di
modularità, essendo questo un paradigma fondamentale per
garantire la crescita e la gestione dei sistemi complessi.
L’installazione prepara un
sistema vuoto (versione 2.2)
che può essere ampliato
scaricando dal sito ufficiale
altri moduli in modo da avere
a propria disposizione solo le
parti che si sono scelte per
gli scopi specifici del sito. Al
contrario la versione 2.0
fornisce un pacchetto già
contenente alcuni moduli, in
modo da poter partire fin da subito con un set minimo di feature.
Il sistema di amministrazione varia leggermente come interfaccia nelle
due ultime versioni scaricabili (2.0 e 2.2), passando da un menu
- 16 -
Dal punto di vista dello sviluppo, i vari moduli sono strutturati piuttosto
bene, ma non vi è un sistema trasparente per farli interagire fra di
loro. Si possono usare unicamente le classi native (“core”) di Xoops e
non vi è un sistema per astrarre e condividere funzioni fra i vari
moduli.
Utilizza una logica object oriented per molte parti del motore, tenendo
un sistema misto per altre parti (funzioni, codice inline), probabilmente
a causa di una precisa scelta di architettura unitamente ai limiti
imposti da PHP 4.
L’utilizzo di Smarty come motore per i template è inoltre una buona
scelta, in quanto è un componente di Pear, la libreria pubblica di
classi per PHP, forse il migliore in quanto a personalizzazione e
velocità.
- 17 -
2.3.3. Mambo
Questo sembra un tool
orientato ad una fascia di
utilizzo più professionale:
Mambo si offre infatti come
strumento aziendale e
quindi presuppongo sia
orientato ad un carico di
lavoro piuttosto elevato.
L’interfaccia è meglio
strutturata dei precedenti,
con un sistema di
amministrazione separato dal sito effettivo, organizzato tramite una
barra orizzontale a menu, ognuna per una specifica categoria
funzionale del motore.
Mambo sembra presentarsi con una struttura a contenitori,
caratteristica comune sia a PHPNuke che a Xoops, ma utilizza una
nomenclatura specifica differente dagli altri. Ha Modules e, in più
strutture chiamate Mambots e Componente, a mio avviso, rischia di
rendere troppo complessa l’interazione con l’utente e di rendere la
curva di apprendimento piuttosto bassa, in quanto, prima di poterlo
utilizzare, bisogna capire tutte le nomenclature che questo motore
introduce.
Questo è evidente durante la programmazione di una di queste parti
per ampliare le funzionalità di Mambo, programmazione che quindi
rischia quindi di essere un po’ dispersiva.
L’interfaccia è comunque
ben strutturata e curata in
molti dettagli anche minori,
ma probabilmente non è
stata realmente pensata con
il concetto di usabilità in
mente: ad esempio c’è una
distinzione fra l’interfaccia di
amministrazione generica e
- 18 -
2.3.4. Drupal
Questo è un framework più che un CMS, piuttosto recente, che
sembra essere una sorta di versione più complessa di un motore per
blog.
Appena installato appare
piuttosto spartano nelle
funzionalità, con una
interfaccia pulita ed
essenziale. Questo ha come
risultato che si riesce ad
usare in un tempo molto
ridotto il motore e le sue
funzionalità.
Inoltre non vi è una reale
separazione fra la parte di
amministrazione e quella pubblica: l’interfaccia è la medesima e le
opzioni gestionali appaiono all’utente loggato con i diritti corretti
tramite un menu.
Come accennato, risulta
essere qualcosa più di un
motore per blog: di base
offre tutta una serie di
funzionalità che servono
per ottenere questo scopo,
ma il motore è ampliabile
tramite dei moduli
scaricabili in modo da poter
personalizzare tutto
- 19 -
2.3.5. WordPress
Pur non essendo un CMS o un Framework in senso stretto,
WordPress è un motore piuttosto interessante. La sua funzione
primaria è quella di gestire blog, ma essendo un motore estensibile
risulta essere facilmente ampliabile per coprire una vasta gamma di
funzionalità.
E’ interessante perché,
seppure orientato ad un fine
preciso (ovvero il blog),
riesce ad essere
sufficientemente flessibile in
modo da adattarsi senza
problemi ad una notevole
varietà di utilizzi.
Inoltre, poiché è
primariamente un motore per
blog è stato accuratamente
studiato per essere molto efficace in questo senso avendo una
interfaccia semplice e immediata, che lo rende facilmente usabile.
Il sistema di plugins peraltro non è strutturato in modo tradizionale:
invece di essere un blocco funzionale separato, usa un corpo di
codice che tramite degli hook si aggancia al motore WordPress
- 20 -
ampliandone le
funzionalità in modo
uniforme, nel modo e luogo
dove serve.
Dal punto di vista della
presentazione, del layout e
della gerarchia, tutto è
semplificato in modo da
essere gestito tramite il
template e, modificando
questo, si personalizzano
le pagine che l’utente vedrà.
L’approccio è piuttosto semplicistico e necessita la conoscenza dei
linguaggi per il web come HTML e CSS, più qualche tag PHP, ma
risulta essere piuttosto veloce e immediato per chi ha un minimo di
conoscenza nel campo, mentre utenti generici possono comunque
utilizzare WordPress senza però andare a cambiare queste
componenti.
- 21 -
3 . R e q u i s i ti d e l s i s t e m a p h pG ol e m
- 22 -
- 23 -
- 24 -
- 25 -
- 26 -
- 27 -
- 28 -
Ogni voce del menu di primo livello accede a parti del motore che non
sono necessariamente state scritte coordinatamente a phpGolem
stesso (estensioni, vedi più avanti), quindi è importante rifarsi a una
guideline coerente.
La prima pagina di ciascuna voce del menu deve fornire un riassunto
visivo dello stato attuale del sistema per quanto riguarda quella
specifica funzionalità.
Nella barra orizzontale di navigazione andranno definiti i vari pulsanti
per eseguire varie operazioni riguardanti la pagina su cui siamo.
Se fosse necessario poter effettuare ricerche o selezioni di vario
genere sugli eventuali elementi gestiti è consigliabile inserire in cima
alla pagina un campo per poter effettuare queste operazioni. Una
funzionalità di questo tipo è sempre consigliata nel caso di elementi
che si pensa potrebbero venire gestiti in grande numero.
- 29 -
- 30 -
4 . A r ch i t e t t u r a g e n e r a l e d e l s is t e m a
4.1. Architettura
Il sistema come abbiamo detto è un framework: questo significa che
fornisce un livello astratto e separato sul quale le applicazioni web
possono essere costruite.
Questo livello contiene una serie di classi per la gestione semplificata
di molti degli aspetti che si ritrovano nella maggior parte degli
applicativi web, come la gestione degli utenti, del database o della
grafica.
- 31 -
- 32 -
4.2. Database
Separiamo per una disamina più dettagliata il livello più basso nelle
sue due componenti principali: Files e Database.
- 33 -
web
wid int (key)
idname varchar(50)
Name varchar(255)
URL varchar(255)
Enabled int
Description varchar(255)
Date date
Time time
IP varchar(15)
- 34 -
ext
extid int (key)
wid int
Extension varchar(20)
Name varchar(20)
FileName varchar(50)
Path varchar(255)
Mode smallint
Sort int
- 35 -
Per questo motivo sono necessarie ben cinque tabelle: users, rights,
groups, r2ug, u2g, che definiscono al loro interno gruppi, utenti, diritti
e le interconnessioni fra gli stessi.
- 36 -
users
uid int (key)
User varchar(32)
Pass varchar(32)
Nick varchar(50)
EMail varchar(60)
Note varchar(80)
SessionHash varchar(32)
LastLogin datetime
Gli ultimi due campi sono utilizzati dal motore e non sono modificabili
direttamente: SessionHash memorizza un hash MD5 variabile che
viene utilizzato per l’identificazione univoca dell’utente, in modo da
aumentare la sicurezza.
LastLogin invece è un semplice campo che viene aggiornato
all’ultima data ed ora di visita di quel preciso utente.
- 37 -
groups
gid int (key)
wid int
Name varchar(30)
Description varchar(128)
rights
rightid int (key)
wid int
Extension varchar(20)
Key varchar(20)
Values tinyint
Description varchar(30)
- 38 -
u2g
ugid int (key)
uid int
gid int
- 39 -
arch
archid int (key)
parentarchid int
wid int
Ref varchar(30)
Template varchar(255)
SubTemplate varchar(255)
Type tinyint
arch_binds
archbindid int (key)
archid int
Tag varchar(64)
x varchar(20)
fx varchar(64)
Param varchar(128)
Access tinyint
- 40 -
config
keyid int (key)
wid int
x varchar(20)
Key varchar(64)
Value varchar(128)
DefValue varchar(128)
OptValue varchar(128)
Description varchar(128)
- 41 -
4.3. Filesystem
Questo livello include sia la strutturazione del framework sul sito web,
sia i files che questo utilizzerà durante il suo funzionamento.
- 42 -
4.4. Framework
Il framework è l’aspetto più importante di tutto il sistema. In questo
caso si tratta di un insieme di classi che collaborano fra di loro e
offrono una serie di funzionalità, solo dal punto di vista logico.
Infatti nessun componente ha mai la possibilità di un output diretto
verso l’utente, che viene invece gestito, come vedremo più avanti,
tramite le estensioni.
- 43 -
- 44 -
- 45 -
- 46 -
- 47 -
- 48 -
- 49 -
- 50 -
- 51 -
- 52 -
Es.
<!--#INCLUDE file="golem.common.inc.html"-->
<!--#INCLUDE file="golem.boxes.inc.html"-->
<!--#INCLUDE file="golem.topics.inc.html"-->
- 53 -
- 54 -
- 55 -
- 56 -
4.5. Estensioni
Come si è potuto notare le estensioni sono il fulcro operativo intorno
al quale si svolgono le operazioni e il mattone base con cui si
costruiscono le applicazioni con golem.
- 57 -
- 58 -
- 59 -
4.6.1. Estensibilità
L’estensibilità è quindi il fulcro attorno al quale è stato sviluppato il
progetto: primariamente, è stato sviluppato un nucleo pensato come
framework, in modo da fornire un livello base su cui costruire.
In secondo luogo, è stato fornito un sistema gestionale per
organizzare in modo logico e coerente l’eterogeneità dei programmi
sviluppabili, in modo da rendere la struttura non solo estensibile, ma
anche fortemente modulare.
- 60 -
4.6.2. Flessibilità
Lo stesso concetto di estensioni, così strutturato, garantisce anche
una notevole flessibilità.
Questo perché la singola estensione garantisce al suo interno
l’esistenza di più livelli distinti, che forniscono un ottimo livello di
separazione funzionale delle varie entità logiche.
- 61 -
4.6.5. Riuso
Ogni estensione ha un unico elemento vincolante, come si è visto,
che è la classe di interfaccia. Tutte le XClasses risultano invece
indipendenti dalla struttura organizzativa di phpGolem e sono quindi
riutilizzabili ovunque come classi separate.
Inoltre, a runtime sono tutte istanziate a oggetti ed efficacemente
condivise fra di loro. Questo minimizza la riscrittura di codice non solo
all’interno della stessa extension, ma su tutto il sistema che si sta
realizzando.
- 62 -
5 . Us e r vi e w
5.1. Installazione
Si è cercato di semplificare il più possibile la procedura di
installazione, in modo che possa essere utilizzata anche da utenti
meno esperti.
- 63 -
- 64 -
- 65 -
5.2. Estensioni
L’ordinamento delle varie voci relative alle estensioni nei menu segue
un raggruppamento logico basato sulla loro funzionalità.
Il primo gruppo ad esempio mostra i nomi secondo i vari passaggi di
configurazione di un sito, dal basso all’alto (extensions, configuration,
architecture). Il secondo gruppo invece è orientato alla gestione degli
utenti e dei gruppi. Il terzo invece mostra le varie operazioni di
gestione per le funzionalità di CMS.
5.2.1. Extensions
Questa estensione è quella caricata di default dal motore e la prima
disponibile su un sistema appena installato.
Infatti lo scopo che persegue è fornire l’interfaccia alle componenti del
framework per la gestione delle altre estensioni: attivazione,
disattivazione e setup.
- 66 -
5.2.2. Configuration
La pagina di configurazione fornisce un modo uniforme per modificare
alcuni valori di configurazione sia del framework che delle singole
estensioni.
- 67 -
5.2.3. Architecture
Questo modulo presenta una visualizzazione gerarchica della
struttura ereditaria dei vari layout presenti su un sito.
E’ facile intuire come le foglie ereditano dai nodi padre, in modo
ricorsivo.
- 68 -
- 69 -
5.2.4. Groups
I gruppi sono un modo per riunire più utenti all’interno di un solo
insieme, in modo da poter associare a questi una serie di diritti
comuni.
- 70 -
5.2.5. Users
Anche per gli utenti vi è una visualizzazione analoga a quella dei
gruppi, con la differenza dovuta al numero potenziale di questi: vi è
infatti, oltre alla lista anche un campo di ricerca che permette di
trovare rapidamente un nominativo specifico.
Nella lista è inoltre specificata chiaramente l’e-mail dell’utente per
poterlo contattare rapidamente.
- 71 -
5.2.6. Articles
La parte di gestione degli articoli è forse una delle più ricche a livello
di interfaccia per il compito importante che deve svolgere, in quanto
sarà uno dei componenti più spesso utilizzati.
- 72 -
A fondo pagina sono presenti alcune opzioni aggiuntive, fra cui la più
importante è sicuramente quella di abilitazione dell’articolo: se è
attivo, l’articolo è pubblicato e quindi visibile da parte di tutti.
- 73 -
5.2.7. Topics
L’interfaccia di questa estensione è costruita in modo analogo a
quella dell’architettura, trattandosi di fatto di un’altra struttura
gerarchica ad albero.
- 74 -
5.2.8. Comments
L’estensione commenti è gestita tramite una lista cronologica
discendente, visualizzante tutti gli ultimi commenti effettuati. Questo
aspetto è stato progettato in modo da poter visualizzare sempre gli
ultimi commenti inseriti per fini di moderazione (modifica o
cancellazione degli stessi).
- 75 -
5.2.9. Files
Il motore files è un componente importante per la gestione sia di un
sito generico sia di un CMS, in quanto il file è la principale unità logica
su cui si lavora.
- 76 -
- 77 -
6 . S p e r i m e n t a z i on e
- 78 -
- 79 -
- 80 -
- 81 -
- 82 -
6.3.3. Utenti
Il sito sarà realizzato tenendo conto delle seguenti categorie di utenti:
1. visitatore occasionale
2. visitatore che cerca informazioni dettagliate
3. utente del framework che cerca informazioni
4. sviluppatore che cerca informazioni
- 83 -
- 84 -
- 85 -
- 86 -
- 87 -
- 88 -
- 89 -
Quindi abbiamo un primo livello costituito dalle sezioni del sito: Home,
FAQ, Manual, Blog, Downloads.
Ognuna di queste avrà, sul menu verticale, diverse liste che saranno
contestuali all’ambiente in cui ci si trova.
La Home avrà infatti un elenco di vari link riguardanti il progetto in
generale e delle eventuali informazioni che un utente occasionale
potrebbe richiedere.
FAQ e Manual saranno organizzate in modo analogo: disporranno
infatti di un campo di ricerca e sul menu appariranno tutte le voci alle
quali sarà possibile accedere.
Blog sarà organizzato come la homepage di un blog: lista di articoli,
con eventuali ultimi commenti e informazioni sull’autore sul lato
destro.
Download non conterrà ulteriori sottosezioni, ma dovrà fornire
indicazioni esaurienti sullo scaricamento e l’installazione successiva
del motore.
- 90 -
- 91 -
- 92 -
6.8. Il risultato
Il sito prodotto aderisce a tutte le linee guida precedentemente
definite e sarà disponibile sul sito www.digitalhymn.com
(golem.digitalhymn.com), da dove sarà possibile scaricarlo, reperire
- 93 -
- 94 -
- 95 -
- 96 -
- 97 -
7 . Ri f e r i m e n t i e b i b l i o gr a fi a
7.1. Riferimenti
A List Apart
http://www.alistapart.com
Apache
http://www.apache.org
IIS
http://www.microsoft.com/WindowsServer2003/iis
Leeander
http://www.leeander.com
Mozilla Firefox
http://www.mozilla.org/products/firefox
MySQL
http://www.mysql.com
- 98 -
OmniGraffle
http://www.omnigroup.com/applications/omnigraffle
OpensourceCMS.com
http://www.opensourcecms.com
Pear
http://pear.php.net
PHP
http://www.php.net
R. Polillo
http://www.rpolillo.it
Smarty
http://smarty.php.net
WebSideStory
http://www.websidestory.com
Wikipedia
http://www.wikipedia.org
7.2. Bibliografia
Design emozionale
D. A. Norman, Apogeo 2004
- 99 -