Bueno creo que entendí más o menos lo que quisiste decir, y viendo otro ejemplo creo que se lo que hay que hacer. Pero me gustaría que lo veas y me sigas dando criticas constructivas. En ese ejemplo vi que crea funciones para:
- función para cargar una página
- función para reemplazar el contenido
- función para usar ambas funciones y cargar el layout
- función para mostrar la página 'generada'
- función para hacer la consulta, utilizar la funcion que carga el layout, y las demás funciones para cargar y reemplazar el contenido del modulo noticia.php. Y para finalizar, mostrar la página completa.
Al final mi código quedó así:
Código PHP:
<?php
require 'sistema/modelo/noticia.php';
class controlador
{
function noticia($noticia_id)
{
$noticia = new noticia();
//carga el layout con la función cargarVista
$pagina = $this->cargarVista();
//carga la vista del modulo noticia.php, o sea del contenido noticia, para esta función
$moduloNoticia = $this->cargarPagina('sistema/vista/modulos/noticia.php');
ob_start();
$array = $noticia->noticias($noticia_id);
if($array!='')
{
$pagina = $this->reemplazarContenido('/\#CONTENIDO\#/ms', $moduloNoticia , $pagina);
}
else
{
$pagina = $this->reemplazarContenido('/\#CONTENIDO\#/ms' ,$moduloNoticia.' No hay registros' , $pagina);
}
//Muestro la página completa y chau
$this->mostrarPagina($pagina);
}
//Función para cargar la vista/skin/layout
function cargarVista(){
$pagina= include 'sistema/vista/vista.php';
$cabecera = $this->cargarPagina('sistema/vista/sectores/cabecera.php');
$pagina= $this->reemplazarContenido('/\#CABECERA\#/ms' ,$cabecera , $pagina);
$lateral = $this->cargarPagina('sistema/vista/sectores/lateral.php');
$pagina = $this->reemplazarContenido('/\#LATERAL\#/ms' ,$lateral , $pagina);
return $pagina;
}
//Función para cargar páginas
function cargarPagina($pagina)
{
return file_get_contents($pagina);
}
//Función para mostrar las páginas
function mostrarPagina($html)
{
echo $html;
}
//Función para reemplazar el contenido de las páginas
function reemplazarContenido($in='/\#CONTENIDO\#/ms', $out,$pagina)
{
return preg_replace($in, $out, $pagina);
}
}
?>
vista.php tiene palabras claves encerradas en ## que son los sectores que van a ser reemplazados.
O sea tengo la función para mostrar la página noticia (function noticia), le paso el layout de la función cargarVista, la vista del contenido que en este caso es el modulo noticia.php, y las variables de la consulta.
Aunque tu me dijiste que debo crear otra clase para pasar la vista a generar y el layout a usar, y aparte pasar las variables de la consulta. Y en el ejemplo vi que todo está en una misma clase pero en diferentes funciones, y que hay una función que hace uso de las demás funciones para mostrar la página completa. No es eso casi lo mismo? O sigo despistado del patron MVC y haciendo otra estructura :S