Hola, soy nuevo en esto de POO y MVC y tengo un problema. En mi controlador tengo una función que recibe una variable por GET (noticiaid), hace una consulta a la base de datos desde el modelo, y para finalizar procesa la vista: el SKIN de la página y el contenido, que es el resultado de la consulta. Mejor miren el código, se entiende mejor:
Código PHP:
require 'sistema/modelo/noticia.php';
class controlador {
function noticia($noticiaid)
{
//con esto hago la consulta a la base de datos y cargo el resultado en $contenido
ob_start();
$noticia= new noticia();
$array = $noticia->noticias($noticiaid);
if($array!='')
{
include 'sistema/vista/'. __SKIN__ .'/modulos/noticia.php';
$contenido = ob_get_clean();
}
else
{
$contenido = 'No hay registros';
}
//con esto cargo el SKIN (vista.php)
include 'sistema/vista/'. __SKIN__ .'/vista.php';
}
}
vista.php recibe $contenido y reemplaza un sector de la página.
Bueno ahora tengo este problema, el SKIN (vista.php) es una página con SECTORES (cabecera, lateral y contenido). Con esa función yo reemplazo el sector CONTENIDO. Pero qué pasa si quiero tener otra función, para cargar la cabera y el lateral separado del contenido? O sea, quiero tener el mismo resultado de esto pero quiero separarlo en 2 funciones:
Código PHP:
function noticia($noticiaid)
{
//con esto cargo la cabecera
ob_start();
include 'sistema/vista/'. __SKIN__ .'/sectores/cabecera.php';
$menu = ob_get_clean();
//con esto cargo el lateral
ob_start();
include 'sistema/vista/'. __SKIN__ .'/sectores/lateral.php';
$menu = ob_get_clean();
//con esto cargo el contenido, es el mismo código que el anterior
ob_start();
$noticia= new noticia();
$array = $noticia->noticias($noticiaid);
if($array!='')
{
include 'sistema/vista/'. __SKIN__ .'/modulos/noticia.php';
$contenido = ob_get_clean();
}
else
{
$contenido = 'No hay datos';
}
include 'sistema/vista/'. __SKIN__ .'/vista.php';
}
Quiero tener separado una función que haga la consulta y cargue el CONTENIDO, y otra función para cargar la CABECERA y el LATERAL. Cómo puedo hacer eso? Estoy buscando pero no encuentro nada que se aplique a este ejemplo, o no estoy sabiendo buscar. Es que en realidad no sé bien que debo hacer. Gracias de antemano.
EDITO: ya encontré la solución. Creo una función para incluir un sector, luego desde la función noticia llamo a esa función con $this. Queda así:
Código PHP:
function cabecera()
{
include 'sistema/vista/'. __SKIN__ .'/sectores/cabecera.php';
}
function noticia($noticiaid)
{
//cargo la cabecera
ob_start();
$this->cabecera();
$menu = ob_get_clean();
//cargo el contenido
ob_start();
$noticia= new noticia();
$array = $noticia->noticias($noticiaid);
if($array!='')
{
include 'sistema/vista/'. __SKIN__ .'/modulos/noticia.php';
$contenido = ob_get_clean();
}
else
{
$contenido = 'No hay datos';
}
include 'sistema/vista/'. __SKIN__ .'/vista.php';
}
Aunque todavía me quedan dudas, de esta forma tengo que crear una función para cada sector. Como hago para juntar los sectores CABECERA y LATERAL en una sola función, y luego usarlas en la función noticia? Sospecho que estoy haciendo una burrada, alquien tiene algún consejo?