在 CI 模板加载器类中加载一个或多个视图
Posted
技术标签:
【中文标题】在 CI 模板加载器类中加载一个或多个视图【英文标题】:Load one or more views within a CI Template loader class 【发布时间】:2014-03-04 01:55:39 【问题描述】:参考这篇文章的最佳答案:
Header and footer in CodeIgniter
如果需要,您如何更新此类以支持多个视图?
例如有时会在页眉和页脚模板之间加载两个或多个视图...
提前致谢:)
【问题讨论】:
变量呢?每个视图应该有一组不同的变量还是所有视图都有相同的变量? 如果这就是你的意思,他们可能有不同的变量,如果不是,对不起:) 【参考方案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);
【讨论】:
感谢您的回答 - 我几乎遇到了这样的事情 :) P.S 感谢 Hashem Qolami 也提供了解决方案。我最终选择了萨穆茨。 @Random 不客气,我尝试实现一个更复杂的算法。这为您提供了更好的功能。【参考方案2】:嗯,这是我改进模板函数功能的尝试:
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
,反之亦然。
【讨论】:
以上是关于在 CI 模板加载器类中加载一个或多个视图的主要内容,如果未能解决你的问题,请参考以下文章
在 Freemarker 模板中加载模板而不为模板加载设置目录或类