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

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