Foros del Web » Programando para Internet » PHP »

¿Sistema de templates?

Estas en el tema de ¿Sistema de templates? en el foro de PHP en Foros del Web. Buenas. Hace un tiempo que estoy mirando formas de separar el código PHP del HTML. Lo primero que encontré tanto en Internet como en varios ...
  #1 (permalink)  
Antiguo 01/04/2010, 11:04
 
Fecha de Ingreso: mayo-2008
Mensajes: 30
Antigüedad: 16 años
Puntos: 0
¿Sistema de templates?

Buenas. Hace un tiempo que estoy mirando formas de separar el código PHP del HTML. Lo primero que encontré tanto en Internet como en varios libros es que se recomendaba el uso de Smarty. Personalmente me gusta hacer las cosas desde cero y no quería usar un motor de plantillas. Así pues me puse a escribir y terminé haciendo lo que os muestro bajo estas líneas. Funciona bien en todo lo que he hecho, pero me gustaría saber vuestra opinión y saber si realmente es un buen método o mejor lo descarto por otro. ¿Qué usáis vosotros para separar el código?

Archivo: index.tpl.html
Código HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<title>Template</title>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	</head>
	<body>
	¡Hola! ¿Qué tal estáis {a}, {b}, {c} y {d}?
	</body>
</html> 
Archivo: index.php
Código PHP:
<?php
function template($ruta,$array)
{
    
/* Tomamos el archivo */
    
$template file_get_contents("$ruta");
    
/* Reemplazamos el contenido entre corchetes por la etiqueta PHP */
    
foreach ($array as $a => $b) {
        
$template str_replace("{".$a."}""$b"$template);
    }
    
/* Mostramos el template con los cambios realizados */
    
echo eval("?".">$template");    
}

/* Variable al azar */
$rand "1";

/* Establecemos las variables */
$ruta "./index.tpl.html";
$array = array(
    
"a" => "<?php echo $rand; ?>",
    
"b" => "<?php echo 'Pepe'; ?>",
    
"c" => "<?php echo 'Manolito'; ?>",
    
"d" => "<?php echo 'Pedro'; ?>"
);

/* Llamamos a la función */
template($ruta,$array);
?>
Un saludo y gracias .
  #2 (permalink)  
Antiguo 01/04/2010, 11:07
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: ¿Sistema de templates?

bueno en realidad se ve un tanto trabajoso tu script.. podrias buscar una manera mas simple de entregar las variables a la plantilla...
yo hace un tiempo tambien hice una classe para esto mismo.. aunque termine agregandole muchas cosas como para crear etiquetas html diamicamente.. formularios etc... si quieres puedes ver el codigo en esta url..

http://www.forosdelweb.com/f68/aport...on-php-780890/

asi te das una idea de como asigne las variables yo y te surja alguna idea..
saludos!

PD: revisa el metodo assign_data() dentro de la clase.. ese es que se encarga de lo que te digo!
__________________
More about me...
~ @rhyudek1
~ Github
  #3 (permalink)  
Antiguo 01/04/2010, 11:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: ¿Sistema de templates?

Otra opción mucho más rápida es que no hagas un reemplazo si no simplemente incluir las variables en otro script, por ejemplo:
template.php
Código PHP:
Ver original
  1. <div>Hola <?php echo $user; ?></div>

codigo:
Código PHP:
Ver original
  1. function template($template, array $data)
  2. {
  3.          ob_start();
  4.          extract($data);
  5.          include($template);
  6.          return ob_get_clean();
  7. }
  8.  
  9. echo template('template.php', array(
  10.       'user' => 'Fulano'
  11. ));

Así retienes el poder usar PHP dentro de tu template para cosas simples como un if(), o un for() etc.

Saludos.
  #4 (permalink)  
Antiguo 01/04/2010, 11:30
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: ¿Sistema de templates?

Lee sobre patrón MVC.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 01/04/2010, 15:29
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: ¿Sistema de templates?

Cita:
Iniciado por GatorV Ver Mensaje
Otra opción mucho más rápida es que no hagas un reemplazo si no simplemente incluir las variables en otro script, por ejemplo:
template.php
Código PHP:
Ver original
  1. <div>Hola <?php echo $user; ?></div>

codigo:
Código PHP:
Ver original
  1. function template($template, array $data)
  2. {
  3.          ob_start();
  4.          extract($data);
  5.          include($template);
  6.          return ob_get_clean();
  7. }
  8.  
  9. echo template('template.php', array(
  10.       'user' => 'Fulano'
  11. ));

Así retienes el poder usar PHP dentro de tu template para cosas simples como un if(), o un for() etc.

Saludos.
estuve haciendo pruebas con extract y al parecer es mas rápido un

Código PHP:
Ver original
  1. foreach($array as $key => $value) $$key = $value;

la prueba la hice con microtime
habra alguna pagina o algo donde verificar esto?..

saludos!
__________________
More about me...
~ @rhyudek1
~ Github
  #6 (permalink)  
Antiguo 01/04/2010, 16:21
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: ¿Sistema de templates?

Es posible que sea más rápido, ya que extract() checa por colisiones y varias cosas más . Una implementación aún mejor que en lo particular me gusta más es la de Zend_View.

Saludos.

Etiquetas: template, sitemap
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 11:42.