我从控制器加载多个视图,以显示页面。
$this->load->view('header');
$this->load->view('content', $data);
$this->load->view('sidebar1', $data1);
$this->load->view('sidebar2', $data2);
$this->load->view('footer');
但是我认为这不是一个干净的方法。是否可以通过创建单个主视图来改进它,例如“视图/页面”,其中包含所有上述视图。然后我可以只调用主视图,而不是调用上述所有视图,例如:
$this->load->view('main');
在这种情况下,如何传递内容、sidebar1 和 sidebar2 的变量? 谢谢
将每个视图的数据作为数组传递到主视图,然后在主视图加载子视图时传递这些数组。
$data['sidebar1_data'] = array($one => 'one');
$data['sidebar2_data'] = array($two => 'two');
然后在您的主视图中:
$this->load->view('sidebar1', $sidebar1_data);
$this->load->view('sidebar2', $sidebar2_data);
在我的项目中,我倾向于这样做:
$this->load->vars($data);
$this->load->view('template_name');
我的模板在其自身的其他视图中加载。
CodeIgniter 文档对 $this->load->vars() 方法进行了如下说明:
使用 $this->load->vars($data) 有助于不必为模板中的每个视图加载数据。“此函数采用关联数组作为输入,并使用 PHP extract 函数生成变量。此函数生成的结果与使用上面 $this->load->view() 函数的第二个参数相同的结果。您可能想要的原因独立使用此函数是指如果您想在控制器的构造函数中设置一些全局变量,并让它们在从任何函数加载的任何视图文件中可用,您可以多次调用此函数。到一个数组中以转换为变量。
$newData = array_merge($data, $data1, $data2);
$this->load->view('main', $newData);
如果 $data、$data1、$data2 中没有同名的键,则无需修改任何视图即可更改变量名称。