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