在 CodeIgniter 中将视图包含在视图中的最佳方法
我正在启动一个大型的codeigniter项目,并希望尝试为内容片段创建一些可重用的“迷你”视图,例如可能显示在不同页面/控制器上的数据循环。
从主控制器的视图中调用视图是否更好?如果是这样,如何?或者我应该从控制器调用“迷你视图”,从而将视图的代码传递到主视图?
我正在启动一个大型的codeigniter项目,并希望尝试为内容片段创建一些可重用的“迷你”视图,例如可能显示在不同页面/控制器上的数据循环。
从主控制器的视图中调用视图是否更好?如果是这样,如何?或者我应该从控制器调用“迷你视图”,从而将视图的代码传递到主视图?
其他视图中的视图称为嵌套视图。有两种方法可以在 CodeIgniter 中包含嵌套视图:
提前加载视图并传递到其他视图。首先把这个放在控制器中:
<?php
// the "TRUE" argument tells it to return the content, rather than display it immediately
$data['menu'] = $this->load->view('menu', NULL, TRUE);
$this->load->view ('home', $data);
?>
然后在您希望菜单显示的位置放入视图。<?=$menu?>
首先把这个放在控制器中:
<?php
$this->load->view('home');
?>
然后把这个放在视图中:/application/views/home.php
<?php $this->view('menu'); ?>
<p>Other home content...</p>
关于最好的方法,我更喜欢第一种方法而不是第二种方法,因为通过使用第一种方法,我不必混淆代码,它不像包含php。虽然间接地两者是相同的,但第一种方法比第二种方法更清晰,更干净!
老实说,我更喜欢通过模板视图来做到这一点,然后从控制器加载必要的数据,这意味着重复代码要少得多,并且比从视图中加载视图更好地遵循DRY概念。特别是对于页眉,页脚和菜单之类的东西。
所以我的模板视图看起来像这样:
模板.php
$this->load->view('header',$title);
$this->load->view('sidebar',$sidebar_content);
$this->load->view('main_content',$main_content);
$this->load->view('footer');
然后在我的控制器中,我将所需的数据传递给模板,如下所示:
$data['title'] = 'Home Page';
$data['sidebar_content']='pages/standard_sidebar';
$data['main_content'] ='pages/my_home_page';
$this->load->view('template',$data);
这样做有很多好处。首先,我可以有多个模板,例如,在我的情况下,我有两个主要模板,一个用于没有侧边栏的整页视图,一个用于带有侧边栏的页面,我还调用if语句来决定要包含哪个标题,常规模板或带有管理菜单的标题。
是的,我可以在每个主视图页面中包含页眉,侧边栏和页脚,但这最终会产生大量重复的代码。例如,如果我希望我的所有页面都有新的东西,其他一些小片段,会发生什么?使用模板,我将代码段添加到相应的模板中,然后就完成了。走另一条路,我找到每个页面并在那里添加片段视图,在我看来,这相当于在页面中使用CSS,浪费并且最终不可维护。