Hola:
No es tanto como una obra maestra, pero funciona, que es lo importante

Poner todo aquí sería muy largo, asi que sólo voy a poner el archivo de la clase y el archivo al que llamamos por URL. Luego vereis una serie de constantes e includes de otros archivos que contienen datos, variables, funciones, constantes... pero no los pongo pq necesitaría varios posts
class.php Código PHP:
<?
class Template {
var $_variables = array();
var $_contenido = "";
// Función útil para asignar variables determinadas
function asignar($variable,$valor){
$this -> _variables[$variable] = $valor;
}
// Asignamos todas aquellas variables comunes a todos los archivos (plantillas y contenidos)
function rellenar(){
$this -> asignar('server',SERVER); # Servidor
$this -> asignar('foro',FORO); # Dirección del foro
$this -> asignar('email_admin',EMAIL_ADMIN); # Email administrativo
$this -> asignar('usuarios_activos',U_ACTIVOS); # Usuarios activos
$this -> asignar('fecha',fecha()); # Fecha actual
$gzip_activado = (GZIP_ON_OFF) ? "activada" : "desactivada";
$this -> asignar('gzip_on_off',$gzip_activado); # Compresión GZIP
}
// Añadimos contenidos a partir del fichero $file y lo asignamos a $variable
function archivo($variable,$file) {
$this -> archivo = new Template; # Creamos un objeto para los contenidos
$this -> archivo -> rellenar(); # Definimos variables comunes a todo
extract($this -> archivo -> _variables); # Asignamos variables comunes
$this -> archivo -> parsear($file); # Sustituimos variables comunes
$this -> archivo -> limpiar(); # Eliminamos variables temporales
$this -> asignar($variable,$this -> archivo -> _contenido); # Asignamos la variable buscada
}
// Sustituimos las variables en determinado archivo
function parsear($file) {
$this -> asignar('tiempo_creacion',tiempo()); # Asignamos variable de tiempo de creación
$this -> rellenar(); # Definimos variables comunes
extract($this -> _variables); # Asignamos variables comunes
ob_start(); # Iniciamos buffer para poder coger los contenidos
include($file); # Metemos la plantilla, ya con variables sustituidas
$this -> _contenido = ob_get_contents(); # Cogemos el contenido
ob_end_clean(); # Eliminamos buffer
$this -> limpiar(); # Eliminamos variables temporales
}
// Borramos las variables temporales
function limpiar(){
unset($this -> _variables);
}
// Mostramos la página, en función de si tenemos compresión GZIP o no
function mostrar($gzip) {
if ($gzip) {
ob_start();
include(PATH.'includes/gzip.php');
echo $this -> _contenido;
new gzip();
} else {
echo $this -> _contenido;
}
}
}
?>
pagina.php Código PHP:
<?
// Definimos PATH y metemos archivo de configuración
define(PATH,"./");
include(PATH.'includes/config.inc.php');
// Creamos la página
$tpl = new Template;
// Asignamos título de la página
$tpl -> asignar('titulo','Esto es el título');
// Asignamos contenidos desde archivo
$tpl -> archivo('contenido','contenido.php');
$tpl -> archivo('scroll',PATH.'includes/scroll.php');
// Sustituimos variables en la plantilla
$tpl -> parsear(PATH.'includes/plantilla.php');
// Mostramos variables
$tpl -> mostrar(GZIP_ON_OFF);
?>
Como podeis suponer, faltan muchísimas cosas pero no puedo poner todo aquí... Ah, por cierto, la clase GZIP definida en gzip.php es la clase de compresión que se encuentra en xergio.net