Hola piner, te mostraré como lo hago yo con mi Framework/CMS que estoy desarrollando llamado "ZanPHP", primero que nada debes tener un poco de conocimiento sobre patrones de diseño en PHP5, pero es algo así:
1. Primero la estructura del sistema es algo así:
- applications
- core
- lib
- index.php
2. Dentro de lib tengo una carpeta llamada "themes" y dentro de ella tengo las carpetas de los diseños que quiero cambiar ("swichear") y cada carpeta tiene archivos html o php.
3.- Tengo una clase de templates para hacer los cambios y es algo así:
Código PHP:
class Templates {
public $Text;
public $Theme;
public $FullScreen = false;
private $Vars = array();
private $Registry;
public function __construct($Registry) {
$this->Registry = $Registry;
}
public function Theme($Theme) {
$this->Theme = $Theme;
}
public function Load($Template, $Path = null, $View = "No", $Direct = false) {
global $Registry;
if($View == "No") {
$Template = Lib . Slash . Themes . Slash . $this->Theme . Slash . $Template;
} elseif(isset($View)) {
$Template = Applications . Slash . $View . Slash . Templates . Slash . $Template;
}
if($Path == true) return $Template;
if($Direct == true) {
foreach ($this->Vars as $Key => $Value) {
$$Key = $Value;
}
include ($Template);
return true;
}
if(!file_exists($Template)) die(__(_("Error 404: Theme Not Found: ")) . $Template);
else {
foreach ($this->Vars as $Key => $Value) {
$$Key = $Value;
}
include ($Template);
}
}
bueno no entrare en detalle en el código debido a que debería explicarte varias cosas de mi sistema y ese no es el punto, pero básicamente le paso como parámetro la plantilla (html o php) verifica si es una vista o un theme (es propio del ZanPHP) y en caso de que sea php le da valor a cada variable y finalmente incluye la plantilla.
Para mandarlo a llamar en mis controladores (de cada aplicación), primero defino cual es mi theme a utilizar y luego le paso las plantillas...
Código PHP:
//: Set Theme.
$this->Registry["Templates"]->Theme(WebTheme);
//: Load Header
$this->Registry["Templates"]->Load("header.php");
Pasandome variables y sus respectivos valores:
Código PHP:
$this->Registry["Templates"]->Set("Records", $this->Posts);
$this->Registry["Templates"]->Set("Pagebreak", true);
$this->Registry["Templates"]->Set("Content", $this->Registry["Templates"]->Load("post.php", true, "blog"));
$this->Registry["Templates"]->Load("content.php");
y pues básicamente así funciona, no puedo profundizar más debido a que mi sistema aún no esta terminado y aún no he pensado si lo liberare como open source o no, pero si tienes dudas puedes hacerme cualquier consulta, un saludo.