基本上对于我的webapp我正试图组织它好一点。就目前而言,每次我想加载页面时,我都必须从我的控制器那样做:
$this->load->view('subviews/template/headerview');
$this->load->view('subviews/template/menuview');
$this->load->view('The-View-I-Want-To-Load');
$this->load->view('subviews/template/sidebar');
$this->load->view('subviews/template/footerview');
你可以说它不是很有效率。
所以我想我会创建一个'主'视图 - 它叫做template.php。这是模板视图的内容:
<?php
$view = $data['view'];
$this->load->view('subviews/template/headerview');
$this->load->view('subviews/template/menuview');
$this->load->view($view);
$this->load->view('subviews/template/sidebar');
$this->load->view('subviews/template/footerview');
?>
然后我想我可以从这样的控制器中调用它:
$data['view'] = 'homecontent';
$this->load->view('template',$data);
不幸的是我根本无法做到这一点。有没有人可以解决这个问题或修复我可以实施的方法?我已经尝试在template.php中将“s”和's'放在$ view周围,但这没什么区别。通常的错误是“未定义的变量:数据”或“无法加载视图:$ view.php”等。
谢谢大家!
杰克
答案 0 :(得分:13)
我相信你所拥有的地方:
$view = $data['view'];
$this->load->view('subviews/template/headerview');
$this->load->view('subviews/template/menuview');
$this->load->view($view);
$this->load->view('subviews/template/sidebar');
$this->load->view('subviews/template/footerview');
你需要摆脱界限:
$view = $data['view'];
这是因为当从控制器传递数组时,只能通过$ view而不是$ data ['view']访问视图上的变量。
答案 1 :(得分:6)
这里提出了一些建议http://codeigniter.com/forums/viewthread/88335/
我选择了这种方法: 控制器类:
public function __construct()
{
parent::__construct();
$this->load->vars(array(
'header' => 'partials/header',
'footer' => 'partials/footer',
));
}
public function index()
{
$data['page_title'] = 'Page specific title';
$this->load->view('my-view', $data);
}
查看:
<?php $this->load->view($header, compact('page_title')); ?>
... blah blah ...
<?php $this->load->view($footer); ?>
必须在视图中加载视图并传递子视图可能使用的任何变量,这远非理想。能够使用像Action Filters in Laravel这样的东西可能会更好。