may 11
2009
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.
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");
}
}
}
?>CristalLab


