Il modo più semplice per implementare un sistema di gestione del layout (per intenderci, la parte comune a tutte le pagine di un sito) è utilizzare l’istruzione include, che permette di dividere il template in due o più file che saranno richiamati nelle rispettive posizioni.

Si tratta di una soluzione che, nella sua semplicità, incontra una serie di limitazioni: costrutti particolarmente complessi o alcuni tag possono trovarsi a cavallo di due file, con notevoli difficoltà di gestione e l’impossibilità di usare gli strumenti messi a disposizione degli IDE (che, anzi, mostreranno errori di sintassi nei file).

Una soluzione che imita, in un certo senso, le pagine master di ASP.NET è la gestione del buffer di output… vi faccio vedere come.

Realizzare il template

Il nostro template sarà contenuto in un singolo file php, che ad esempio chiamiamo template.php.
<!DOCTYPE html>
<html>
<head>
<title><?php echo $page_title; ?></title>
</head>
<body> ... <?php echo $page_content; ?> ... <?php echo $sidebar_content; ?> ... </body> </html>

Utilizzare il template


<?php //Inizializzo l'output buffering. Tutto ciò che PHP produrrà in output è ora sotto la mia gestione.
ob_start(); //comandi php e codice HTML relativi al contenuto pagina
$page_content=ob_get_clean(); //Assegno alla variabile il contenuto del buffer di output e lo pulisco
// comandi php e codice HTML relativi alla sidebar
?> <h1>Ciao</h1> <?php
$sidebar_content=ob_get_clean();
$page_title="La mia pagina con template";
require("template.php");
?>

In parole povere il meccanismo è il seguente: ogni volta che genero in output un blocco di pagina (es. contenuto, sidebar, ecc…), invoco la funzione che pulisce il buffer e ne restituisce il contenuto.

Il buffer di output non contiene codice PHP, ma tutto ciò che sarà “buttato” in output, e quindi il risultato delle operazioni. Fa parte dell’output anche l’HTML che scrivo tra il tag di chiusura di php (?>) e la riapertura ( <php).

Al termine dello script, l’eventuale buffer residuo sarà comunque inviato al browser.

Utilizzando l’output buffering abbiamo a disposizione un sistema rapido per gestire il layout di siti semplici.

Se invece il nostro progetto è più complesso, vale la pena prendere in considerazione l’utilizzo di framework quali Symphony o Zend, che oltre alla gestione del layout prevedono componenti per le più disparate esigenze!

Alla prossima!