2011-04-04 69 views
5

Necesito hacer un motor de plantillas de php pequeño y simple. Busqué mucho y muchos de ellos eran demasiado complejos para entender y no quiero usar smarty y otros motores similares, tengo una idea de Stack Overflow como esta. :¿Cómo hacer un motor de plantilla php?

$template = file_get_contents('file.html'); 
$array = array('var1' => 'value', 
       'txt' => 'text'); 

foreach($array as $key => $value) 
{ 
    $template = str_replace('{'.$key.'}', $value, $template); 
} 

echo $template; 

Ahora, en lugar de hacerse eco de la plantilla sólo quiero añadir incluir "archivo.html" y se mostrará el archivo con valores de las variables correctas y quiero poner el motor en un lugar separado y solo se incluyen en la plantilla, lo que quiero usar lo declara la matriz y al final incluye el archivo html como phpbb. Lo siento, estoy pidiendo mucho pero ¿alguien puede explicar el concepto básico detrás de esto?

EDITAR: Bueno, permítanme ser sincero, estoy haciendo un guión para el foro y tengo toneladas de ideas para él, pero quiero hacer su plantilla de sistema como phpBB así que necesito un motor de plantilla separado personalizado si puede ayudar por favor estás invitado a trabajar conmigo perdón por el anuncio ..: p

+0

¿Por qué no ¿Quieres usar Smarty? ¿Qué ventajas tendrá su enfoque sobre otros motores de plantillas? – mdm

+0

¿Por qué reinventar la rueda? Si es solo un caso en el que no quieres invertir el tiempo en aprender inteligentemente, entonces creo que estás cometiendo un error. Le ahorrará tiempo a largo plazo, ya que los desarrolladores astutos ya han resuelto todos los problemas que encontrará al tratar de crear su propio motor. – 3urdoch

+14

PHP ya es un motor de plantillas. Smarty ESTÁ reinventando la rueda. – Capsule

Respuesta

5

¿Qué pasa si, por una escritura más fácil de mantener, usted pasa a los funciones?

algo como esto:

<?php 

function get_content($file, $data) 
{ 
    $template = file_get_contents($file); 

    foreach($data as $key => $value) 
    { 
    $template = str_replace('{'.$key.'}', $value, $template); 
    } 

    return $template; 
} 

Y puede utilizar de esta manera:

<?php 

$file = '/path/to/your/file.php'; 
$data = = array('var1' => 'value', 
       'txt' => 'text'); 

echo get_content($file, $data); 
2

Una vez que elimine todos los errores, solucione el gran problema de rendimiento en el que se está metiendo, terminará con un motor de plantillas como Smarty y otros.

Este método de búsqueda de lugar es mucho más lento que la compilación de PHP. No maneja escapando muy bien (te encontrarás con problemas XSS). Será bastante difícil agregar condiciones y bucles, y los necesitarás tarde o temprano.

11

archivo.html:

<html> 

<body> 
<h3>Hi there, <?php echo $name ?></h3> 
</body> 

</html> 

archivo.php:

<?php 
    $name = "Keshav"; 
    include('file.html'); 
?> 

no consigue más fácil que esto. Sí, usa variables globales, pero si el nombre del juego es simple, aquí está. Simplemente visite 'http://example.com/file.php' y listo.

Ahora, si quieres que el usuario vea 'file.html' en la barra de direcciones del navegador, deberías configurar tu servidor web para tratar los archivos .html como scripts PHP, lo cual es un poco más complicado, pero definitivamente realizable. Una vez hecho esto, se pueden combinar los dos archivos en uno solo:

archivo.html:

<?php 
    $name = "Keshav"; 
?> 
<html> 

<body> 
<h3>Hi there, <?php echo $name ?></h3> 
</body> 

</html> 
+2

Daría +100 si pudiera, no hay necesidad de reinventar la rueda. PHP significa PHP Hypertext Processor, e "Hypertext" no está allí por error ... – Capsule

+0

¿Le gustaría un motor de plantilla para hacer que sus plantillas sean modificables? –

+2

Cien veces sí. ** PHP es un motor de plantillas **. Habilite las etiquetas cortas y no es un motor de plantillas medio malo. – meagar

1
<?php 
    class view { 
     private $file; 
     private $vars = array(); 

     public function __construct($file) { 
      $this->file = $file; 
     } 

     public function __set($key, $val) { 
      $this->vars[$key] = $val; 
     } 

     public function __get($key, $val) { 
      return (isset($this->vars[$key])) ? $this->vars[$key] : null; 
     } 

     public function render() { 
      //start output buffering (so we can return the content) 
      ob_start(); 
      //bring all variables into "local" variables using "variable variable names" 
      foreach($this->vars as $k => $v) { 
       $$k = $v; 
      } 

      //include view 
      include($this->file); 

      $str = ob_get_contents();//get teh entire view. 
      ob_end_clean();//stop output buffering 
      return $str; 
     } 
    } 

Así es como se usa:

<?php 
    $view = new view('userprofile.php'); 
    $view->name = 'Afflicto'; 
    $view->bio = "I'm a geek."; 
    echo $view->render(); 
+0

¡¡Tienes que dar crédito a dónde pertenece !! http://www.sitepoint.com/flexible-view-manipulation-1/ – goodMan

+0

@goodMan, lol Nunca vi ese artículo. –

Cuestiones relacionadas