Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/08/2013, 19:57
mathiasmontiel
 
Fecha de Ingreso: febrero-2013
Mensajes: 163
Antigüedad: 11 años, 3 meses
Puntos: 1
Combinar funciones

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?

Última edición por mathiasmontiel; 10/08/2013 a las 22:02