Foros del Web » Programando para Internet » PHP »

mini templating

Estas en el tema de mini templating en el foro de PHP en Foros del Web. buenas! Se que existen muchos mecanismos de template, como las smarty que esta muy buenas. Pero en este caso necesito implementar mi propio forma ya ...
  #1 (permalink)  
Antiguo 18/09/2008, 10:41
Avatar de Viet  
Fecha de Ingreso: octubre-2003
Ubicación: Mar del Plata - Argentina
Mensajes: 247
Antigüedad: 20 años, 6 meses
Puntos: 2
mini templating

buenas!
Se que existen muchos mecanismos de template, como las smarty que esta muy buenas. Pero en este caso necesito implementar mi propio forma ya que debo integrarme con un sitio ya funcionando y no puedo aplicar algo de lo conocido.

Lo que estoy tratando de hacer son mini "templates" de html que solo tienen %key% donde tengo que remplazar el contenido con algún valor en php.
Para ello cree una breve función que lo hace apartir de un array.

Código PHP:
/*
    esta funcion toma el contenido de un archivo y remplaza todas las keys por los values que hay en el array dentro del doc.
    ej:
        mini_template('/path/archivo.html',array('link'=>'www.ph.com'));
        esto remplazara todas las veces que encuentre en archivo.html a %link%  con www.ph.com
*/
function mini_template($file_name,$values){
    
$content file_get_content($file_name);
    foreach(
$values as $key=>$val){
        
$content str_replace("%$key%",$val,$content);
    }
    return 
$content;

Quiero preguntarles si esto esta mal o si ya existe algo mas eficiente... y de paso preguntar si esto es muy ineficiente, en cuestion de performance...

Gracias
__________________
Keep it simple and keep it fast.
  #2 (permalink)  
Antiguo 18/09/2008, 11:24
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 16 años, 5 meses
Puntos: 25
Respuesta: mini templating

ambas variables se llaman iguales OJO. $content
__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.
  #3 (permalink)  
Antiguo 18/09/2008, 11:48
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: mini templating

esta bien.... de hecho, yo uso una funcion (o dos) similares.... una que reemplaza {foo} y otra, que reemplaza... directamente, ej.

Código PHP:
$repl = array('@mi_var' => 'FOO''%bar%' => 'CANDY');
echo 
str_replace(array_keys($repl), array_values($repl), 'Esta es @mi_var y %bar% no significa nada!!!'); 
en si, que no te preocupe el performance... ya que como debemos imaginar, incluso Smarty es demasiado codigo, y mas complejo... lo que implicaria menos performance, pero... y???


PDTA: por cierto, eddwinpaz .... ¿que tiene que se llamen igual $content ??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 18/09/2008, 12:25
Avatar de Viet  
Fecha de Ingreso: octubre-2003
Ubicación: Mar del Plata - Argentina
Mensajes: 247
Antigüedad: 20 años, 6 meses
Puntos: 2
Respuesta: mini templating

Muchas gracias !
Lo pase a una clase para optimizar un poco la cosa, ya que no deberia leer el archivo varias si en el mismo request deseo hacer varias veces el mismo template con distintos valores. Por ejemplo si el template es un row de un listado.

dejo el cod por si a alguien le sirve o lo puede mejorar :

Código PHP:
/*
 * shortcut para el uso de MiniTemplate
 * ej:
 *  render_to_response('/path/archivo.html',array('link'=>'www.php.com')); 
 *  esto remplazara todas las veces que encuentre en archivo.html a {{link}}  con www.php.com 
 * 
*/
function render_to_response($file_name,$values){
    
$template = new MiniTemplate($file_name);    
    return 
$template->render($values);
}

/*
 * Esta clase es para levantar y remeplazar templates html(o lo que sean)
 * con valores a las claves entre {{key}} 
 * */
class MiniTemplate{
    
    var 
$file_name;
    var 
$content;
    
    function 
MiniTemplate($file_name){
        
$this->file_name $file_name;
        
$this->content file_get_content($file_name);
    }
    
    
// remplaza los valores en el content segun las keys
    
function render($values){        
        
$res $this->content;        
        foreach(
$values as $key=>$val){
            
$res str_replace("{{$key}}",$val,$res);
        }
        return 
$res;        
    }    

de manera muy simple se puede parametrizar los token que usa, en este caso {{}}, pero como no lo necesito, :)

Saludos
__________________
Keep it simple and keep it fast.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:00.