原创作者: hideto
阅读:2067次
评论:1条
更新时间:2011-05-26
这次的视频很有用,详细解释了layout的用法
一般来说layout有如下五种:
gobal layout,controller layout,shared layout,dynamic layout,action layout
假设我们有一个views/projects/index.rhtml页面:
下面来看看各种layout的用法。
1,global layout
添加views/layouts/application.rhtml:
在layouts目录下添加application.rhtml即可,<%= yield %>即输出我们的projects/index.rhtml页面
由于我们的controller都继承自ApplicationController,所以application.rhtml会先解析
2,controller layout
添加views/layouts/projects.rhtml:
道理同上,ProjectsController当然会使用同名的projects.rhtml作layout了
注意的是controller layout会覆盖global layout
3,shared layout
添加views/layouts/admin.rhtml:
我们建立了admin layout,然后在需要使用该layout的controller中指定即可:
4,dynamic layout
有时候我们需要根据不同的用户角色来使用不同的layout,比如管理员和一般用户,比如博客换肤(也可以用更高级的theme-generator)
5,action layout
在action中指定layout即可:
上面的index方法指定使用projects layout,当然我们也可以指定不使用layout,如printable页面:
需要注意的是,这5种layout会按顺序后面的覆盖前面的layout
关于erb和capture的文章:http://hideto.iteye.com/blog/97353
一般来说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
1 楼 xu_ch 2009-02-21 12:47