Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

MVC: A ver qué les parece esto que arme! :)

Estas en el tema de MVC: A ver qué les parece esto que arme! :) en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola ! Tengo un primer aproach armado para la parte de "Vista" del MVC que estoy armando. Aún está muy crudo, le faltan controles y ...
  #1 (permalink)  
Antiguo 20/01/2008, 17:50
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 19 años, 4 meses
Puntos: 2
MVC: A ver qué les parece esto que arme! :)

Hola !

Tengo un primer aproach armado para la parte de "Vista" del MVC que estoy armando. Aún está muy crudo, le faltan controles y seguro habrá mejores formas de aplicarlo, pero quisiera mostrarlo para ver qué opinan y recibir algunos comentarios!

El tema es así... tengo un directorio /templates/ en donde tengo subdirectorios con templates... por ejemplo, tengo el template "basic":

/templates/basic/0_head.php
/templates/basic/1_content.php (siempre estará vacío)
/templates/basic/2_head.php

A su vez dentro de /templates/ tengo archivos sueltos... por ejemplo, "index.php".



LA IDEA

Basicamente, quiero que desde el controlador yo pueda decirle al view:

"Quiero usar el tempalte 'BASIC' (que me da una presentación visual para el encabezado y el footer) ... y quiero que el centro / contenidos sea el archivo xxx.php"

El view va a incluir todos los archivos de forma ordenada, los del directorio del template indicado + el archivo con los contenidos generados recientemente por el MODEL.



Esto lo hago con los siguientes metodos:

1. setTemplate($nombre);

a. Define el nombre del template en la clase
b. Entra al directorio $nombre y busca todos los archivos almacenandolos en un array
c. Ordena alfabéticamente ese array


2. display($nombre);

a. Recorre el array de archivos del template
b. Reemplaza el archivo n_contents.php por el archivo $nombre
c. incluye ( include() ) todos los archivos de forma ordenada

Dentro de mi directorio /templates/basic/ tengo todos los archivos con su numero de orden antepuesto en el nombr de archivo (para que la inclusión sea ordenada). Luego tengo el archivo "señuelo" x_contents.php que está vacio pero me sirve para saber en qué orden voy a incluir al archivo independiente del template.


Códigos:
Código PHP:
        function setTemplate($name) {
            
$path site_path 'templates'DIRSEP .  $name DIRSEP;

            
$this->templateName $name;

            
$directorio opendir($path);


            while (
$archivo readdir($directorio)) {
                if (
$archivo != "." && $archivo != "..")
                    
$this->templateFiles[] = $archivo;
            }

            
sort($this->templateFiles);

            
closedir($directorio);

            return 
true;
        }



        function 
display($name) {

            if (
count($this->templateFiles) > 0) {

                foreach(
$this->templateFiles as $key => $value) {

                    
$path site_path 'templates' DIRSEP $this->templateName DIRSEP $value;

                    if (
substr($value2) == "contents.php") {
                        
$value $name.'.php';
                        
$path site_path 'templates' DIRSEP $value;
                    }

                    if (!
file_exists($path)) {
                        
trigger_error ('Template file `' $value '` does not exist.'E_USER_NOTICE);
                        return 
false;
                    }

                    
// Load variables
                    
foreach ($this->vars as $key => $value) {
                        $
$key $value;
                    }

                    include (
$path);
                }
            }

            return 
true;
        } 

Otra opcion sería tener un archivo dentro de cada directorio de templates que contenga el orden de inclusion para encabezado, footer, menu y CONTENIDOS. Esto sería simplemente un primer aproach...

¿Qué les opinan?


Un saludo!!

PD: El código esta muy asi nomás, ya lo se, lo hice a lo rapido para poder plasmar la idea...
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 01:25.