参考这篇文章的最佳答案:
Header and footer in CodeIgniter
如果需要,您如何更新此类以支持多个视图?
e.g。有时在页眉和页脚模板之间加载两个或多个视图...
提前致谢:)
答案 0 :(得分:1)
如果您希望每个视图都拥有自己的变量:
public function template($template_names = array(), $vars = array(), $return = FALSE)
{
$content = $this->view('templates/header', $vars, $return);
foreach ($template_names as $template_name -> $template_vars)
{
$content .= $this->view($template_name, $template_vars, $return);
}
$content .= $this->view('templates/footer', $vars, $return);
if ($return)
{
return $content;
}
}
$this->load->template(array(
'body' => $vars_for_body,
'body2' => $vars_for_body2,
'body3' => $vars_for_body3
), $headerfooter_vars);
答案 1 :(得分:1)
嗯,这是我尝试改进模板功能的功能:
class MY_Loader extends CI_Loader {
public function template($template_name = array(), $vars = array(), $return = FALSE)
{
$content = $this->view('templates/header', $vars, $return);
if (is_array($template_name)) {
foreach ($template_name as $view => $viewVar) {
// Whether the view has different variables
if (is_array($var) && ! is_numeric($view)) {
// Load the view with its own variables
$content .= $this->view($temp, $viewVar, $return);
} else {
// Load the view whith the general variables $vars
// viewVar would be the view name in this case
$content .= $this->view($viewVar, $vars, $return);
}
}
} else {
$content .= $this->view($template_name, $vars, $return);
}
$content .= $this->view('templates/footer', $vars, $return);
if ($return)
{
return $content;
}
}
}
使用此功能,您可以使用以下格式加载视图:
$this->load->template(array(
'first/view' => array('name' => 'value'),
'second/view',
'third/view'
), $generalData);
每个视图都有自己的变量。
在这种情况下,通过传递array('name' => 'value')
作为变量来加载第一个视图。并且第二/第三视图加载了$generalData
作为变量。
如果您需要在第一个视图中访问$generalData
,可以使用+
运算符将变量合并为:array('name' => 'value') + $generalData
,反之亦然。