Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/05/2009, 16:46
Avatar de acoevil
acoevil
 
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 9 meses
Puntos: 32
[APORTE] sistema de plantillas facil de usar

Hola quetal este es mi sistema de plantillas, espero que les guste.

Descripcion: La clase PlantillEvil permite separar el codigo de la presentacion de manera facil y rapida al momento de crear nuestros sitios web.

La clase se llama PlantillaEvil

Código PHP:
class PlantillEvil{
    
    
/***********************
    creada por : acoevil
    Version: Beta 1.0
    Descripcion: La clase PlantillEvil permite separar el codigo de la presentacion al 
    momento de crear nuestros sitios web.
    
    .
    /***********************/
    
    //Template
    
private $rutaTemplate;
    private 
$StringTemplate;
    
//tags del usuario
    
private $tagsAsigna=array();
    private 
$tagsTemplate=array();
    
    
     function 
__construct($rutaTemplate){
        
$this->rutaTemplate=$rutaTemplate;
        
        if(!
file_exists($rutaTemplate)){
            die(
"El archivo " .$this->rutaTemplate " no existe o no puede abrirse");
        }
    
    }
    private function 
tagsTemplate($rutaTemplate){
        
$this->StringTemplate=file_get_contents($rutaTemplate);
        
preg_match_all('/\{(.*?)\}/',$this->StringTemplate,$encuentros);
        return 
$encuentros//Retornamos el array con los tags del template
        
    
}
    function 
indicaTags($array=array()){
        
$this->tagsAsigna=$array;
        if(empty(
$this->tagsAsigna)){
            die(
"Los tags no se han definido");
        }else{
            
$this->tagsTemplate=$this->tagsTemplate($this->rutaTemplate);
            
        }
    }
    function 
muestraPlantilla(){
        
        for(
$n=0;$n<count($this->tagsTemplate,COUNT_RECURSIVE);$n++){
            foreach(
$this->tagsAsigna as $key => $value){
                if(
$this->tagsTemplate[1][$n]==$key){
    
$this->StringTemplate=str_replace($this->tagsTemplate[0][$n],$value,$this->StringTemplate);
                }
            }
        }
        echo 
$this->StringTemplate;
        
    }

    
    


Modo de uso-> Por ejemplo tenemos una plantilla con el nombre plantilla.tpl la cual queremos utlizar en nuestro sistema de plantillas.

NOTA: La extencion .tpl es la que generalmente se utiliza en las plantillas aunque podemos colocar la extencion ya se ha .html o tpl.

Ok, primero que todo empezemos creando nuestra plantilla


plantilla.tpl



Código HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
	<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
	<meta name="author" content="">

	<title>{titulo}</title>
	
	
<style>@import url("templatecss.css");</style>	
</head>

<body>
<div id="contenedor">
<div id="fecha">Fecha actual {fecha}</div>
<div id="hora">La hora actual {hora}</div>
<div id="funciones_uso">Dame tu nombre  {nombre_f}</div>
</div>
</body>
</html> 

Ok, ya tenemos nuestra plantilla creada.
si miramos con cuidado el codigo html encontramos algo como esto {fecha} {hora} {nombre_f} estos nos servira para indicar donde queremos generar codigo php.

ejemplo: {fecha} se reeemplazaria y mostraria la fecha actual asi como las otras etiquetas encerradas en llaves { }


Lo siguiente es crear un archivo con el nombre useplantilla.php o el nombre que queramos

Código PHP:
require_once('plantillaevil.php');  // hacemos un require a la clase

//despues creamos la fecha la hora y nombre_f que son las que queremos reemplazar en la plantilla

$fecha=date('d/m/Y');
$hora=date('h:m:s');
function 
nombre(){
    return 
'Acoevil';
}

//creamos una instancia de la clase PlantillaEvil y le pasamos como parametro el nombre del template y su debida extencion en este caso .tpl

$plantilla=new PlantillEvil("template.tpl");

//Por medio de objeto accedemos al metodo [B]indicat_tags [/B]donde le pasaremos un array asociativo donde en el key indicaremos lo que queremos reemplazar (debe tener el mismo nombre que tiene en la plantilla) y el value seria el valor por el que queremos reemplazar ese tag




$plantilla->indicaTags(array(
'hora'=>$hora,
'fecha'=>$fecha,
'titulo'=>'Separando el codigo de la presentacion',
'nombre_f'=>nombre()));


//Por ultimo mostramos la plantilla con los cambios realizados 

$plantilla->muestraPlantilla(); 


Espero que les guste, cualquier duda, critica (constructiva)o comentario seran bien recibidos