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>