Ver Mensaje Individual
  #11 (permalink)  
Antiguo 07/02/2013, 23:01
makena_mendoza
 
Fecha de Ingreso: abril-2011
Mensajes: 18
Antigüedad: 13 años, 1 mes
Puntos: 2
Respuesta: Problema aplicando MCV con PHP

SOLUCION !!

No se si es la mejor solución pero es la que cumple con lo que estaba buscando.

La opción de utilizar eval() no es buena por dos motivos, la desaconsejan por su falta de seguridad y segundo porque como vea una etiqueta html da error. Sólo evalúa expresiones PHP, o sea, hay que cargar el archivo en una variable y luego evaluar esa variable. Conclusión, no evalúa el contenido de la variable, con lo que estamos en las mismas.

La solución, no la voy a poner muy bonita pero creo que será suficiente para entenderla si alguien ve este hilo en el futuro. Lo suyo es hacer todo esto con clases y demás, pero lo dicho, para ver la idea creo que es suficiente.

Partimos de la base de una plantilla tal y como puse en el esquema del inicio del hilo plantilla.php

Tendremos archivos para completar la plantilla:

header.php
menu.php
centro.php

y para completar centro tendremos:

datosEmpresa.phtml

el controlador:

control.php

Código PHP:
<?php

define
("PATH_VISTAS",         "view/");
define("VISTA_EMPRESA",      "datosEmpresa.phtml");
define("VISTA_PLANTILLA",     "plantilla.phtml");
define("VISTA_HEADER",        "header.phtml");
define("VISTA_MENU",          "menu.phtml");
define("VISTA_CENTRO",       "centro.phtml");

include(
PATH_VISTAS.VISTA_PLANTILLA);

function 
cargaVista($vista ="")
{
  require 
PATH_VISTAS.$vista;
}

?>
Defino unas constantes con los directorios de los archivos y creo una función para cargar las vistas.

plantilla.phtml

Código PHP:
<html><body>
<div id="header">
  <?php cargaVista(VISTA_HEADER); ?>
</div>
<div id="contenedor"> 
  <div id="menu">
    <?php cargaVista(VISTA_MENU); ?>
  </div>
  <div id="centro">
    <?php cargaVista(VISTA_CENTRO); ?>
  </div>
</div>
</body></html>
Lo único que hago es llamar a una función que cargará cada vista donde corresponda. El usuario, que de momento seré yo, sólo debe saber como se llama cada vista o módulo que se quiere cargar. Poco más o menos lo que sucede con los CMS's.

Finalmente para cargar los datos de la empresa

centro.phtml

Código PHP:
<html><body>
<div>  ....... </div>
<div>
  <?php cargaVista(VISTA_EMPRESA); ?>
</div>
<div>  ....... </div>
</body></html>
Este sistema el inconveniente que tiene es que no se puede filtrar lo que el que diseña la plantilla hace. Pero bueno, si no sabe más, que aprenda. Lo que si habrá que hacer es cuidar el tema de la seguridad para que no entre ningún código de alguien no autorizado.

Me parece una solución de sencilla que es, hasta tonta, pero bueno, tres días dándole vueltas al tema.

Decidme que os parece, para bueno y para malo.

Gracias otra vez por vuestra ayuda. Si no me hubierais dado ninguna pista aún andaría rompiéndome la cabeza.