code igniter cargando una vista al final del controlador

En Ci, tiene la posibilidad de cargar una vista directamente desde el constructor de su controlador, estoy cargando el encabezado y el pie de página de mi página (ya que es lo mismo para cada función)

class Add extends CI_Controller{
    public function __construct()
    {
        parent::__construct();
        $this->load->helper('url');
        $this->load->view('header_view');
        $this->load->view('footer_view');       
    }

    function whatever()
    {
        //do stuff
    }

 }

Pero esto cargará la vista de pie de página antes de cargar mi función, entonces, ¿hay alguna forma de hacerlo sin cargar "manualmente" la vista al final de cada función?

preguntado el 12 de junio de 12 a las 15:06

Puedes usar el manos para cargar el encabezado antes de la función de su controlador (post_controller_constructor) y el pie de página después (post_controller). -

@Rocket no podría usar también el __destruct() método también? ¿O tengo un concepto equivocado de esto? -

Usar manos es un enfoque creativo, pero puede complicarse si no desea un encabezado/pie de página el 100 % del tiempo. -

3 Respuestas

Agregaría el encabezado/pie de página en la vista principal con los datos, o usaría una biblioteca de plantillas (uso esto una).

Si está en la vista principal para la función;

// in view for html page
<?php $this->load->view('header'); ?>
<h1>My Page</h1>
<?php $this->load->view('footer'); ?>

Respondido el 12 de junio de 12 a las 15:06

+1 para plantillas. De los documentos: "La plantilla es adecuada para usted si no le gusta llamar al encabezado, pie de página y otras vistas globales desde cada método de controlador". :-)- Cohete Hazmat

No debería representar ninguna vista en el constructor. Los controladores CI deberían parecerse más a esto:

class Add extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->load->helper('url'); 
    }

     function index()
     {
        $this->load->view('header_view');
        $this->load->view('home_page');
        $this->load->view('footer_view');
     }

     function whatever()
     {
        /*
         * Some logic stuff
         */

        $data_for_view = array(
            'product' => 'thing',
            'foo'     => 'bar'
        );

        $this->load->view('header_view');
        $this->load->view('show_other_stuff', $data_for_view);
        $this->load->view('footer_view');
     }

 }

Respondido el 12 de junio de 12 a las 15:06

Creo que está tratando de evitar escribir. $this->load->view('header_view'); and $this->load->view('footer_view'); in cada método. - Cohete Hazmat

He llegado con este enfoque:

 class Add extends CI_Controller{
    public function __construct()
    {
        parent::__construct();

        // load some static
        $this->data['page_footer'] = $this->common_model->get_footer();

    }
    private function view_loader () {
        //decide what to load based on local environment
        if(isset($_SESSION['user'])){
            $this->load->view('profile_view',  $this->data);
        } else {
             $this->load->view('unlogged_view',  $this->data);
        }
    }


    function index()
    {
        $this->data['page_content'] = $this->profile_model->do_stuff();

        // call once in every function. this is the only thing to repeat.
        $this->view_loader();
    }

  }

Respondido 19 Feb 14, 00:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.