Esta es una clase para usar plantillas en sitios pequeños, espero sea útil
template.class.php
Código php:
Ver original<?php
/* ****************************************
template.class.php: Clase para crear plantillas de sitios pequeños que permite cambiar el diseño
de todo el sitio modificando sólo archivos de plantilla (.tpl) y estilos (.css)
Autor: Ricardo Garza (Triby) [url]http://www.forosdelweb.com/miembros/triby/[/url]
Licencia: Puedes usar y modificar este script para sitios personales o comerciales
Para distribuirlo sólo conserva estos créditos
Requerimientos:
PHP 4 o posterior
Declarar:
CONSTANTE - Sólo para evitar accesos directos al script
**************************************** */
header('HTTP/1.0 403 Forbidden'); die('No tienes permisos para ver el contenido del directorio o abrir este archivo.'); }
// Uso: $html = new TplParser('archivo.tpl', 'directorio/plantilla/', 'directorio/auxiliar/');
// Las etiquetas serán leídas desde el archivo .tpl e inicializadas como cadena vacía ('')
class TplParser {
var $header = '';
var $body = '';
var $footer = '';
var $tags = array(); // Aquí guardamos todas las etiquetas encontradas var $started = false;
var $tpldir = '';
var $tplaux = '';
// Constructor
function TplParser($tplFile = 'main.tpl', $dirtpl = '', $diraux = '') {
// Cargamos el archivo $tplFile y buscamos todos los elementos necesarios para crear encabezado y pie
$this->tpldir = $dirtpl; // Ruta relativa al directorio donde se almacenan los archivos de la plantilla, ejemplo: "plantillas/mi-estilo/"
$this->tplaux = $diraux; // Ruta relativa para encontrar archivos a incluir, ejemplo: "auxiliar/"
$thefile = "$dirtpl$tplFile";
die('El archivo de plantilla no existe.'); // Buscamos todas las etiquetas dentro del archivo
foreach($varrefs[1] as $tagname) {
// Omitimos etiquetas que pueden corresponder a estilos CSS o códigos que no debemos reemplazar
continue;
$this->tags[$tagname] = '';
}
if(!isset($this->tags['mainbody'])) die('No existe la etiqueta "mainbody" para crear contenido en el archivo de plantilla.'); $maintag = false;
// Creamos header y footer en base a la ubicación de {mainbody}
foreach($output as $cline) {
$cline .= "\n";
if(!$maintag)
if(trim($cline) == '{mainbody}') $maintag = true;
else
else
$this->footer .= $cline;
}
}
// Asignamos valores a las etiquetas
function assignVars
($tags = array()) { foreach($tags as $tk => $tv)
$this->tags[$tk] = $tv;
}
// Interpretamos header y footer, ejecutalo solo hasta que vayas a presentar contenidos
function parseAll() {
// Juntamos todo para no tener que realizar dos veces el reemplazo
$splithere = '<!-- separar contenidos -->';
$allcode = $this->header . $splithere . $this->footer; $allcode = $this->parseTags($allcode, $this->tags);
}
// Interpretar el codigo, reemplazando las etiquetas con sus respectivos valores $tags['etiqueta'] = 'valor'
function parseTags($code, $tags) {
$auxdir = $this->tplaux;
if($code == '')
return '';
foreach($tags as $tag => $data) {
continue;
$data = ($data != '' && file_exists("$auxdir$data") && !is_dir("$auxdir$data")) ?
$this->parseFile("$auxdir$data") : $data; $search[] = '#\{'.$tag.'\}#';
$replace[] = $data;
}
}
return $code;
}
// Cargar un archivo (.txt, .htm, .css, .js, .php, .tpl) y devolver el contenido como cadena
function parseFile($file) {
$allowed = array('txt', 'htm', 'css', 'js', 'php', 'tpl'); return '';
include($file);
return $content;
}
// Devolver el encabezado
$this->started = true;
}
// Devolver el pie de página
function footer() {
return $this->footer;
}
}
Ejemplo de main.tpl
Código html:
Ver original<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es"> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> <meta name="keywords" content="{meta_keys}" /> <meta name="description" content="{meta_descrip}" /> {meta}
<meta name="distribution" content="global"/> <meta name="robots" content="index,follow"/> <link rel="stylesheet" href="{tpl_url}estilos.css" type="text/css" charset="iso-8859-1" /> {script}
{titulo_ventana}
{menu}
{subtitulo}
{login.php}
{mainbody}
{no_asignada}
{regreso}
Ejemplo de uso:
Código php:
Ver original<?php
define('CONSTANTE', 1); // Sólo para evitar acceso directo a otros scripts include 'template.class.php';
$html = new TplParser('plantilla.tpl', 'plantilla/mi-estilo/', 'include/');
'titulo' => 'Título de la ventana del navegador',
'meta_keys' => 'Palabras,clave,del,sitio,o,la,página',
'meta_descrip' => 'Descripción del sitio o la página',
'tpl_url' => 'plantilla/mi-estilo/', // Ruta relativa a URL del directorio de plantilla actual
'script' => '<script type="text/javascript" src="mi-javascript.js"></script>"',
'titulo_ventana' => '<h1>Es el título principal de la página.</h1>',
'menu' => crear_menu(),
'regreso' => links_regreso()
// login.php sera buscado en el directorio include y se agregara el contenido automaticamente a la etiqueta
);
// Asignamos los valores creados
$html->assignVars($etiquetas);
// Modificamos otras etiquetas
$html->tags['subtitulo'] = '<h2>Este es el subtítulo</h2>';
// Todas las etiquetas que no tengan valor serán removidas de la salida HTML
// En este ejemplo {no_asignada} no tiene valor y no aparecerá
// Reemplazamos todas las etiquetas
$html->parseAll();
// Desplegamos el encabezado
// Aquí creamos el contenido de la página, ya sea con html directo,
// funciones php, o incluyendo otros archivos
// Finalmente desplegamos el pie de página
echo $html>footer();
function crear_menu() {
$cm = '<ul><li><a href="index.php">Página principal</a></li>';
$cm .= '<li><a href="otra_pagina.php">Otra página</a></li>';
$cm .= '<li><a href="otra_pagina.php">Otra página</a></li></ul>';
return $cm;
}
function links_regreso() {
return 'Regresar a: <a href="index.php">Página principal</a>';
}
Ejemplo de login.php
Código php:
Ver original<?php
if(isset($_SESSION['usuario'])) echo "Bienvenido <strong>{$_SESSION['usuario']}</strong>.";
else
echo 'Por favor ingresa o regístrate.';