用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3881|回复: 2
收起左侧

[视图] 用CI原生方法实现类似rails的layout和content_for的灵活视图功能

[复制链接]
发表于 2013-11-18 23:43:24 | 显示全部楼层 |阅读模式
Ruby on Rails 提供了灵活的视图机制,可以在布局文件里用yield :head和 yield :content来给视图页面某段代码留个“空位” ;
同时在视图文件里,将content_for :head 和 :content里包含代码块填充到布局文件里的留出的对应“空位”上:

布局文件:
HTML复制代码
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
<html>  
  <head>  
    <title>Todo List</title>  
    <%= stylesheet_link_tag 'application' %>  
    <%= yield :head %>  
  </head>  
  <body>  
    <div id="container">  
      <h1>Todo List</h1>  
<%= yield :content %>
    </div>  
  </body>  
</html>
 
复制代码


视图文件:
HTML复制代码
 
<% content_for :head do %>  
  <%= stylesheet_link_tag 'projects' %>  
<% end %>  
<% content_for :content do %>  
  <h2>Projects</h2>  
<% end %>  
 
复制代码


在CI也可以用原生的方法实现相似的功能:

布局文件:
PHP复制代码
 
<head>
    <link href="general.css" rel="stylesheet">
<?php
$_vars['_partial'] = 'head';
echo $this->load->view($partial, $_vars, TRUE);
?>
 
</head>
<body>
<h1>Todo List</h1>
<?php
$_vars['_partial'] = 'content';
echo $this->load->view($partial, $_vars, TRUE);
?>
</body>
 
复制代码


视图文件:
PHP复制代码
 
<?php if ($_partial === 'head') { ?>
<link href="project.css" rel="stylesheet">
<?php } ?>
<?php if ($_partial === 'content') { ?>
<h2>Projects</h2>  
 
<?php } ?>
 
复制代码


控制器:
PHP复制代码
 
        $this->view_vars['partial'] = '视图文件名';
        $this->view_vars['各种参数']...
        $this->load->view('布局文件名', $this->view_vars);
 
复制代码


总结:
主要思路是采用CI原生的Loader view机制,实现层层嵌套,实现的关键是在视图文件中对代码块的分组。
这个思路应该有不足的地方和完善的空间,请各位不吝赐教。谢谢。


发表于 2013-11-21 09:00:59 | 显示全部楼层
CI的嵌套视图。以前也尝试过一种方法。
http://cier.ap01.aws.af.cm/index.php/docs/app/template
 楼主| 发表于 2013-11-26 13:54:13 | 显示全部楼层
大道达人 发表于 2013-11-21 09:00
CI的嵌套视图。以前也尝试过一种方法。
http://cier.ap01.aws.af.cm/index.php/docs/app/template ...

@大道达人 谢谢回复。:)

看了你的思路,也是用到CI的load->view机制,但是好像有个问题:就像在原帖上提到的“如何将代码分组”,
为了获得更灵活的layout/view。

p.s. 我这暂时也没别的项目,在做我们自己的一个产品最近。来这儿也比较不勤快。
一块儿学习进步吧,将来有机会合作的。谢谢。


本版积分规则