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 **************************************** */ } // 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 $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"; // 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] = ''; } $maintag = false; // Creamos header y footer en base a la ubicación de {mainbody} foreach($output as $cline) { $cline .= "\n"; if(!$maintag) $maintag = true; else else $this->footer .= $cline; } } // Asignamos valores a las etiquetas 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->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) { 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"> <head> <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} </head> <body> <div id="header"> {titulo_ventana} </div> {menu} <div id="contenido"> {subtitulo} {login.php} {mainbody} {no_asignada} <div class="regreso"> {regreso} </div> </div> </body> </head>
Ejemplo de uso:
Código php:
Ver original
<?php 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 echo "Bienvenido <strong>{$_SESSION['usuario']}</strong>."; else echo 'Por favor ingresa o regístrate.';