Ahgigu 发表于 2013-11-18 23:43:24

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

Ruby on Rails 提供了灵活的视图机制,可以在布局文件里用yield :head和 yield :content来给视图页面某段代码留个“空位” ;
同时在视图文件里,将content_for :head 和 :content里包含代码块填充到布局文件里的留出的对应“空位”上:

布局文件:

<!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>


视图文件:

<% content_for :head do %>
<%= stylesheet_link_tag 'projects' %>
<% end %>
<% content_for :content do %>
<h2>Projects</h2>
<% end %>


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

布局文件:

<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 if ($_partial === 'head') { ?>
<link href="project.css" rel="stylesheet">
<?php } ?>
<?php if ($_partial === 'content') { ?>
<h2>Projects</h2>

<?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

Ahgigu 发表于 2013-11-26 13:54:13

大道达人 发表于 2013-11-21 09:00 static/image/common/back.gif
CI的嵌套视图。以前也尝试过一种方法。
http://cier.ap01.aws.af.cm/index.php/docs/app/template ...

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

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

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


页: [1]
查看完整版本: 用CI原生方法实现类似rails的layout和content_for的灵活视图功能