Comunidad PHPeros

Lenguajes => PHP => Tutoriales PHP => Mensaje iniciado por: Jumarras en 04 de Noviembre de 2011, 19:07:57 pm

Título: [Tutorial] Sistema de plantillas
Publicado por: Jumarras en 04 de Noviembre de 2011, 19:07:57 pm
Hola, hace poco he necesitado un sistema de plantillas tipo smarty o algo parecido, es decir, poner por ejemplo {{texto}} en el html y despues lo cambiase por un texto que quiera yo. He estado buscando en internet como hacer algo parecido, pero solo he encontrado una cosilla en taringa, pero tenia unas cosas que no me gustaba, asi que lo edite un poco.

Como no habia nada parecido pro el foro, o por lo menos y ono lo he encontrado, he decidido postearlo para el que quiera.

////////////////////////////////////////////////////////PHP (¿index.php?)
Código: [Seleccionar]
<?php
/////////////////////////////[CLASS]
class TemplateClass{
//Declaraciones

    private 
$_dir    = &#39;&#39;; //carpeta de los archivos .tpl (los templates)
    
private $_file_ext = &#39;.tpl&#39;; //formato de los templates, (default = .tpl)
    
private $_vars = array(); //variable para las traducciones
    
private $_delimiters  = array(&#39;{{&#39;, &#39;}}&#39;); //limitadores para saber donde tiene que buscar (ejemplo = {{ejemplo}} )

    public function 
Assign($name$value){ //funcion para asignar palabras a las traducciones
        
if(!array_key_exists($name$this->_vars)) //comprobamos que la palabra no este ya en el array
            
$this->_vars[$name] = $value//asignamos la palanra al texto traducido
    
}
public function GetAssign($name){ //funcion por si queremos obtener la traduccion desde php
return $this->_vars{$name};
}
    public function 
Template($file){ //funcion para traducir las palabras desde html
if( $output = @file_get_contents($this->_dir.$file.$this->_file_ext)){ //comprobamos que el archivo de la plantilla existe
foreach($this->_vars as $name => $value){ //recorremos el array completo y los asignamos
$output str_replace($this->_delimiters[0].$name.$this->_delimiters[1], $value$output); //recorremos todo el archivo para cambiar las palabras con los delimitadores a su respectiva traduccion
}
return $output//mostramos la traduccion
}
else 
die("La plantilla no existe."); 
    }
}
$tpl = new TemplateClass(); //iniciamos la clase

/////////////////////////////[ASIGNAMOS QUE PALABRAS CAMBIAR Y POR CUAL]
$tpl->assign(&#39;language&#39;, &#39;Español&#39;); //en el primero se pone la palabra que estaria entre {{ }} y en el otro por cual cambiar. esto si quereis podeis ponerlo en un php a parte y hacer un include despues de la funcion.


/////////////////////////////[ASIGNAMOS EL NOMBRE DE LA PLANTILLA SIN EXTENSION]
echo $tpl->Template(&#39;test&#39;); //le decimos a la funcion template cual es la plantilla a mostrar
?>


////////////////////////////////////////////////////////HTML (test.tpl)

Código: [Seleccionar]
{{language}}