2010-11-10 24 views
1

尝试学习CI并浏览文档以获得更好的理解。没有得到一个单独的库,我可以通过包括观看像这样一个列表中进行模板:获取CodeIgniter的挂件 - 模板/加载视图

$this->load->view('header'); 
$this->load->view('navigation'); 
$this->load->view('sidenav_open'); 
$this->load->view('blocks/userinfo'); 
$this->load->view('blocks/stats'); 
$this->load->view('sidenav_close'); 
$this->load->view('content',$data); 
$this->load->view('footer'); 

这是有道理的,但我真的有一个对我的每一个控制器(页)?不知道是否有办法将它包含在初始控制器中(欢迎),然后以其他方式引用它?或者可能有些东西我完全缺失

+0

请问一些这样的事情:http://stackoverflow.com/questions/2617742/codeigniter-php-calling-a-view-from-within-a-view是更多的标准? – kilrizzy 2010-11-10 15:57:20

回答

9

您可以从视图文件中加载视图。例如,考虑一个普通的页面模板称为page_template.php

<html> 
<body> 
    <div id = "header"> 
     <?php $this->load->view('header');?> 
     <?php $this->load->veiw('navigation');?> 
    </div> 
    <div id = "sidenav"> 
    <?php $this->load->view('sidenav');?> 
    </div> 
    <div id = "content"> 
    <?php echo $content;?> 
    </div> 

    <div id = "footer"> 
     <?php $this->load->view('footer');?> 
</body> 
</html> 

通过利用CodeIgniter的abiltiy的装入更多的活力的地区返回一个视图作为控制器的变量:

$template['content'] = $this->load->view('content',$data,TRUE); 
$this->load->view('page_template',$template); 

通过传递TRUE对于加载函数,CI将从视图返回数据而不是输出到屏幕。

您的sidenav部分可能是它自己的视图文件sidenav.php,其中您的'块'硬编码或加载类似于上面的示例。

我已经完成了两种方法,包括每个控制器方法中每个视图的一些视图,并使用加载子视图和动态区域的页面模板,到目前为止,第二种方法让我更开心。

+2

这很重要,所以我只想澄清一点:将'true'作为第三个参数传递给视图加载器方法会返回视图的确切输出_as a string_。当您在异步请求期间加载视图并且您想使用JavaScript将HTML字符串插入到DOM中时,这非常有用。 – treeface 2010-11-10 19:59:11

1

从视图中加载视图可能会导致混淆。

扩展Controller类隐藏了来自该方法的大部分复杂性,但仍然利用通过在每次页面加载时渲染一次来生成常见视图(页脚,页眉,导航栏等)的想法。

具体来说,请查阅CI用户指南和wiki,以获得对MY_Controller的引用 - 您可以通过在./libraries目录中创建一个MY_Controller.php文件来扩展它。

在那里您可以调用视图片段,也可以使用load->view()调用的第三个参数= 功能。您可以将这些加载到$this->data - 例如将页脚加载到$this->data['footer']。在您的各种控制器中,继续将视图数据添加到$this->data。在你的观点中 - 我通常使用的模板除了骨架HTML和一些基本CSS以外没有其他任何东西,然后回显整个页眉,页脚,导航和主要内容块,作为变量取自$this->data

增加的奖励 - 对于CI新手,你很可能很快会寻找如何做其他事情,一个MY_Controller会让你变得容易:)

我有一个关于简化视图部分的生成和显示的维基页面,就像你想在这里做,使用MY_Controller在:

https://github.com/EllisLab/CodeIgniter/wiki/Header-and-Footer-and-Menu-on-every-page---jedd

+0

您的链接已死亡。一个完美的例子说明为什么答案应该完全“独立”。 – Sparky 2012-12-07 23:00:34

+0

感谢您的有益建议。嵌入了答案。链接另一端的剩余信息。 – jedd 2013-01-06 11:52:00