代码点火器加载控制器末端的视图

时间:2012-06-12 14:01:30

标签: php codeigniter

在Ci上,您可以直接从控制器的构造函数加载视图,我正在加载页面的页眉和页脚(因为每个函数都是相同的)

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
    }

 }

但是这会在加载我的函数之前加载页脚视图,所以有没有办法在没有“手动”加载每个函数末尾的视图的情况下执行它?

3 个答案:

答案 0 :(得分:4)

我会在主视图中添加带有数据的页眉/页脚,或者使用模板库(我使用此one)。

如果在主视图中用于功能;

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

答案 1 :(得分:0)

您不应该在构造函数中渲染任何视图。 CI控制器看起来应该更像这样:

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');
     }

 }

答案 2 :(得分:0)

我想出了这种方法:

 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();
    }

  }