在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
}
}
但是这会在加载我的函数之前加载页脚视图,所以有没有办法在没有“手动”加载每个函数末尾的视图的情况下执行它?
答案 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();
}
}