Sei in Home page » Documentazione » Usare il mason per costruire un C.M.S.

Soluzione integrata di telefonia su internet a banda larga.
Cerca su questo sito:  

Vuoi essere aggiornato in tempo reale su tutto quello che mi succede giorno per giorno?
Visita il mio nuovo blog

Usare Mason per costruire un sito a frame senza frame.

Come costruire un sito con gli stessi vantaggi dei frame ma senza utilizzarli.

La precedente versione di questo sito utilizzava i frame per avere una visualizzazione uniforme della parte superiore della pagina html e per l'albero del menu a sinistra. Ma l'utilizzo dei frame nei siti web non è una buona scelta in quanto, per esempio, i motori di ricerca fanno fatica e spesso non indicizzano correttamente i siti che utilizzano i frame. Inoltre il loro utilizzo costringe a scrivere codice aggiuntivo su tutte le pagine per obbligare tali pagine ad essere visualizzate solo all'interno del frame.

Ma l'uso dei frame ha l'enorme vantaggio di costruire un ambiente omogeneo a tutto il sito senza dover riscrivere ogni volta il codice per generare la sezione superiore e sinistra in ogni pagina perdendo così la mantenibilità del sito essendo costretti ogni volta a modificare ogni pagina se si desidera modifiare una di queste due sezioni.

Per ottenere tutti i vantaggi dei frame ma senza utilizzarli ho usato degli script in Perl di modo da ottenere che singole pagine che automaticamente hanno la stessa sezione superiore e sinistra. In particolare ho utilizzato un derivato del Perl chiamato Mason che ha il vantaggio di semplificare la costruzione di pagine dinamiche e può essere inglobato nella stessa pagina html. In realtà non ho utilizzato quest'ultima caratteristica in quanto non mi piace mischiare codice Perl con codice HTML ma ho utilizzato un'altra stupenda caratteristica di questo motore di scripting ossia la possibilità di intercettare tutte le richieste in un unico punto: uno script chiamato autohandler.

Questo mi ha permesso di risolvere un'altro enorme problema: il problema della lingua. Io sono un italiano madrelingua e non scrivo in modo eccellente in inglese così che la maggior parte del mio sito è in lingua italiana e non ho ne il tempo ne la voglia di tradurlo in inglese. Ma l'inglese è la lingua universale e quindi fornire una versione in inglese è un "must" irrinunciabile.

Se sei interessato a conoscere come ho risolto questa cosa e come, in generale, funziona questo sito, andiamo a dare un'occhiata più da vicino a cosa accade quando un browser richiede una pagina esistente su questo sito (vedremo dopo che richieste a pagine non esistenti seguono un'altra strada.

Come detto, ogni richiesta web viene intercettata, in Mason, da uno script chiamato autohandler. In questo caso lo script estrae la lingua della pagina richiesta dall'url e apre quattro file: il modello superiore e sinitro, un modello base che emula i frame tramite una tabella con due righe e due colonne e la pagina richiesta.

Il modello superiore, il sinistro e il modello base dipendono dalla lingua cioè ci sono due modelli superiori, due sinistri e due base, uno per la lingua italiana e uno per la lingua inglese.

Dopo aver letto questi file, lo script autohandler estrae il contenuto del tag <BODY> dal modello superiore e lo mette nella cella "top" del modello base quindi estrae il body del modello sinistro e lo mette nella cella "left" e estrae il body della pagina richiesta mettendo il contenuto nella cella "center". Inoltre legge i dati contenuti tra il tag <HEAD> e il tag </HEAD> del file richiesto inserendo questi dati nell'head del modello base in modo da copiare, per esempio, eventuali script, il titolo della pagina, etc. Inoltre legge gli eventuali attributi del tag <BODY> della pagina richiesta e li inserisce quali attributi del tag <TD> della cella "center" in modo da simulare, per esempio, il colore di background e/o l'immagine di background della pagina richiesta.

Infine ritorna la pagina creata al browser.

Attenzione: tutte le pagine sono delle normali pagine html con un <HEAD>, un <BODY> e senza alcun script in PERL (sembra incredibile ma le ho create usando il Microsoft FrontPage :-).

L'unico script in Perl è l'autohandler (che, per equità non ha codice html :-) che costruisce la pagina prendendo i mattoncini dai vari template e dalla pagina richiesta, assemblando il tutto nel file base e restituendo il risultato al browser.

Diamo ora un'occhiata a cosa succede se viene richiesto un file che non esiste sul sito e come ciò abbia contributo ad aiutarmi nella realizzazione della versione inglese di questo sito.

Nel file di configurazione del mio server web (apache per la cronaca) ho impostato un ErrorDocument personalizzato per il codice di errore 404 (file non trovato) che punta a uno script Mason chiamato fnf.mpl.

Se il file inesistente appartiene alla versione inglese del mio sito allora lo script fnf.mpl, chiamato da apache, cerca di vedere se esiste una versione in italiano della stessa pagina. Se questa non  esiste o se il file appartiene gia al sito italiano viene ritornata una pagina di errore standard (ops...abbiamo travato un link errato!!!). Ma se la versione italiana esiste si usa babelfish.altavista.com per tradurre la pagina in inglese. Attenzione che ho parlato di usare non redirigere. Internamente lo script apre una sessione http con babelfish chiedendogli di tradurre in inglese la pagina italiana. Il risultato viene trattata dllo script come una pagina locale; viene preso l'head, il body, gli attributi del body e tutto ciò viene assemblato con i modelli superiori e sinistro nel file di base in inglese.

Conclusione: ho tradotto il mio sito in modo trasparente.

Prima di concludere permettetemi di aggiungere alcuni indispensabili ringraziamenti: a  Jonathan Swartz per il suo Mason, a Larry Wall per il suo Perl e a Linus Torvalds per il nostro Linux.

JavaScript Menu Courtesy of Milonic.com




 Copyright© 1997-2006 Emiliano Bruni Online dal 16/08/1998 con visitatori Scrivimi all'indirizzo: