ciao
sto realizzando un CMS, la struttura della pagina non è definita in modo statico ma viene caricata da database e generata al volo
qui sotto spiego come faccio
potreste dirmi cosa ne pensate?
ciao e grazie
_______________________________________
Il funzionamento dei templates
Il template è il contenitore grafico di una determinata sezione o modulo del CMS.
La struttura del CMS è composta da una parte fissa e una variabile, la parte variabile è gestita dal template.
codice:
___________________
div_home
___________________
*******template***********
___________________
div_bottom
___________________
Le parti verdi sono fisse, quelle rosse sono variabili.
La definizione del template sostanzialmente indica l'insieme di contenitori che creeranno la struttura della pagina visualizzata, per creare la struttura si utilizzano 3 classi:
Divcontainer
Box
Boxbase
Divcontainer
il costruttore è formato da
string nome del div
array dove gli elementi dell'array possono essere diverse classi di tipo (Divcontainer,Box o Boxbase)
ad esempio l'output di una classe generata con:
new Divcontainer(“pippo”,Array(A,B));
dove A e B sono 2 classi a caso prese tra le 3 disponibili sarà:
<div class=”pippo”>
--- OUTPUT DI A
--- OUTPUT DI B
</div>
Box
Il costruttore è formato da
string nome del div
string non del div che conterrà il contenuto
string titolo del div
string contenuto
ad esempio l'output di una classe generata con new Box(“pippo”,”contenitore”,”titolo”,”
testo</p>”);
sarà
<div class=”pippo”>
<h1>titolo</h1>
<div class=”contenitore”>
testo</p>
</div>
</div>
Boxbase
Il costruttore di Boxbase è invece piu semplice e presenta solo il nome del box e il suo contenuto
string nome del div
string contenuto
di conseguenza l'output della classe
new Boxbase(“pippo”,”
testo</p>”);
sarà
<div class=”pippo”>
</p>
</div>
La costruzione di un template non ha limiti, perchè la classe DivContainer può contenere nel suo array un altro elemento DivContainer, e via cosi...per cui si possono generare tutte le strutture che si vogliono
Le uniche note che si devono considerare sono evitare l'utilizzo dei nomi:
div_head
div_bottom
div_module
Perchè gia utilizzati.
Una nota particolare va a div_module, questo div va utilizzato per dire al sistema dove “separare” l'output, spieghiamoci meglio:
Supponiamo di creare un template per la visualizzazione delle pagine
Il CMS risponderà all'url
URL/pagine/dettaglio/pagina.html
che verrà tradotto nell'url URL?modulo=pagine&operazione=dettaglio&titolo=pagi na
1.viene stampato l'header
2.viene caricato il template
3.viene stampata una parte del template
4.viene stampato il contenuto della pagina
5.viene stampata un'altra parte del template
6.viene stampato il bottom
supponiamo quindi che la struttura generata sia questa:
codice:
___________________
div_home
___________________
div_container
___________________
div_menu sx | div_contenuto pagina | div_menu dx
___________________
___________________
div_bottom
___________________
Il template in questo caso è costituito da 4 classi
codice:
1.div_container
1.menu_sx
2.contenuto_pagina
3.menu_dx
mentre il contenuto di menu_sx e menu_dx è deciso nel template il contenuto di contenuto_pagina dipende dalla pagina richiesta, e quindi dall'output del CMS.
In questo caso quindi contenuto_pagina avrà nome div_module.
Il codice php necessario a generare un template di questo tipo sarà quindi:
Codice PHP:
$this->template=new Divcontainer(“div_container”,Array(
new Box(“menu_sx”,”boxcont”,”MENU SINISTRA”,$menu->getmenusinistra(),
new Boxbase(“div_module”,””),
new Box(“menu_dx”,”boxcont”,”MENU DESTA”,$menu->getmenudestra()
)
));
prossimo step – XML
Il prossimo step sarà quello di modellare questa struttura su un foglio xml, basterà racchiudere le varie classi in contenitori tipo:
codice:
<divcontainer>
<name>div_container</name>
<data>
<box>
<name>menu_sx</name>
<container>boxcont</container>
<title>menu sinistra</title>
<data>
<output>
<module>menu</module>
<method>getmenusinistra</method>
</output>
</data>
</box>
<boxbase>
<name>div_menu</name>
<data></data>
</boxbase>
<box>
<name>menu_dx</name>
<container>boxcont</container>
<title>menu destra</title>
<data>
<output>
<module>menu</module>
<method>getmenudestra</method>
</output>
</data>
</box>
</data>
</divcontainer>