Comunidad de diseño web y desarrollo en internet

Sistema de plantillas MVC en PHP

Hola, en esta oportunidad veremos como hacer un sistema de templates similar al view de Codeigniter (aunque mucho mas sencillo). Este tipo de plantillas, View, no usa una sintaxis propia, si no PHP puro, si quisieras incluso podrías hacer el feo acto de programar en tu template, pero a la ves permite usar funciones y sentencias de control realmente útiles en la vista, por tanto como uses esto, queda a tu criterio.

yo :

vista = view = plantilla = template

el método que usare es muy sencillo, habrá una función llamada view, la cual estará dentro de la clase sistema. La cual en un principio solo hará includes de los ficheros que solicitemos, los cuales dejaremos en una carpeta predestinada:

Código :

<?php 
   class Sistema{
      var $rutaBase;
      var $rutaView;
      function Sistema(){ // funcion Constructora
         // this-> hace referencia a un elemento de esta clase
         $this->rutaBase= 'http://www.mihosting.com/'; 
         $this->rutaView= $rutaBase.'sistema/view/';
      }
      function view($ruta){
         include("{$this->rutaView}$ruta");         
      }
   }
?>


Ya tenemos incluido nuestro template, pero acá va lo interesante, algunas veces vamos a requerir guardar nuestro template en una variable en ves de imprimirlo en pantalla inmediatamente, para ello nos valdremos de unas interesantes funciones de o PHP :

  • ob_start(): detiene el flujo de salida a pantalla.
  • ob_get_contents(): mueve a la izquierda lo que ha sido detenido desde que se detuvo el flujo de salida, osea pasa todo a una variable o lo que quieras.
  • ob_end_clean(): fin para detener el flujo de salida, ahora ya podemos escribir en pantalla.

Ademas veras que la función tiene 2 parámetros, uno para el nombre de archivo y otro para decidir si quieres o no que la función retorne un valor.

Código :

function view($archivo,$return=false){
   if($return){
        ob_start();
         include("{$this->rutaView}$archivo");
         $salida = ob_get_contents();
         ob_end_clean();
         return $salida;
   }else{
         include("{$this->rutaView}$ruta");
   }
}

por lo que el resultado final seria:

Código :

<?php 
   class Sistema{

      var $rutaBase;
      var $rutaView;
      function Sistema(){ 
         $this->rutaBase= 'http://www.mihosting.com/'; 
         $this->rutaView= $rutaBase.'sistema/view/';
      }
      function view($archivo,$return=false){
         if($return){
            ob_start();
              include("{$this->rutaView}$archivo");
              $salida = ob_get_contents();
              ob_end_clean();
              return $salida;
         }else{
            include("{$this->rutaView}$ruta");
         }
      }
   }
?>

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate