浏览 6351 次
锁定老帖子 主题:Rails宝典之第七式: layout详解
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-07-29
一般来说layout有如下五种: gobal layout,controller layout,shared layout,dynamic layout,action layout 假设我们有一个views/projects/index.rhtml页面: <h2>Projects</h2> <ul> <% for project in @projects %> <li><%= project.name %></li> <% end %> </ul> 下面来看看各种layout的用法。 1,global layout 添加views/layouts/application.rhtml: <h1>Application Layout!</h1> <%= yield %> 在layouts目录下添加application.rhtml即可,<%= yield %>即输出我们的projects/index.rhtml页面 由于我们的controller都继承自ApplicationController,所以application.rhtml会先解析 2,controller layout 添加views/layouts/projects.rhtml: <h1>Projects Layout!</h1> <%= yield %> 道理同上,ProjectsController当然会使用同名的projects.rhtml作layout了 注意的是controller layout会覆盖global layout 3,shared layout 添加views/layouts/admin.rhtml: <h1>Admin Layout!</h1> <%= yield %> 我们建立了admin layout,然后在需要使用该layout的controller中指定即可: class ProjectsController < ApplicationController layout "admin" def index @projects = Project.find(:all) end end 4,dynamic layout 有时候我们需要根据不同的用户角色来使用不同的layout,比如管理员和一般用户,比如博客换肤(也可以用更高级的theme-generator) class ProjectsController < ApplicationController layout :user_layout def index @projects = Project.find(:all) end protected def user_layout if current_user.admin? "admin" else "application" end end end 5,action layout 在action中指定layout即可: class ProjectsController < ApplicationController layout :user_layout def index @projects = Project.find(:all) render :layout => 'projects' end protected def user_layout if current_user.admin? "admin" else "application" end end end 上面的index方法指定使用projects layout,当然我们也可以指定不使用layout,如printable页面: def index @projects = Project.find(:all) render :layout => false end 需要注意的是,这5种layout会按顺序后面的覆盖前面的layout 关于erb和capture的文章:http://hideto.iteye.com/blog/97353 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-07-29
什么视频?RailsCast的?
|
|
返回顶楼 | |
发表时间:2007-07-29
www.railscasts.com
|
|
返回顶楼 | |
发表时间:2007-08-22
指定不使用layout太棒了 正不知道怎么解决呢
|
|
返回顶楼 | |