ITPub博客

首页 > 应用开发 > IT综合 > Rails的模板

Rails的模板

原创 IT综合 作者:CharlesCui 时间:2007-11-14 14:45:36 0 删除 编辑
一般来说layout有如下五种:
gobal layout,controller layout,shared layout,dynamic layout,action layout

假设我们有一个views/projects/index.rhtml页面:

代码
  1. <h2>Projectsh2>
  2. <ul>
  3. <% for project in @projects %>
  4. <li><%= project.name %>li>
  5. <% end %>
  6. ul>

下面来看看各种layout的用法。

1,global layout
添加views/layouts/application.rhtml:

代码
  1. <h1>Application Layout!h1>
  2. <%= yield %>

在layouts目录下添加application.rhtml即可,<%= yield %>即输出我们的projects/index.rhtml页面
由于我们的controller都继承自ApplicationController,所以application.rhtml会先解析

2,controller layout
添加views/layouts/projects.rhtml:

代码
  1. <h1>Projects Layout!h1>
  2. <%= yield %>

道理同上,ProjectsController当然会使用同名的projects.rhtml作layout了
注意的是controller layout会覆盖global layout

3,shared layout
添加views/layouts/admin.rhtml:

代码
  1. <h1>Admin Layout!h1>
  2. <%= yield %>

我们建立了admin layout,然后在需要使用该layout的controller中指定即可:
代码
  1. class ProjectsController < ApplicationController
  2. layout "admin"
  3. def index
  4. @projects = Project.find(:all)
  5. end
  6. end

4,dynamic layout
有时候我们需要根据不同的用户角色来使用不同的layout,比如管理员和一般用户,比如博客换肤(也可以用更高级的theme-generator)

代码
  1. class ProjectsController < ApplicationController
  2. layout :user_layout
  3. def index
  4. @projects = Project.find(:all)
  5. end
  6. protected
  7. def user_layout
  8. if current_user.admin?
  9. "admin"
  10. else
  11. "application"
  12. end
  13. end
  14. end

5,action layout
在action中指定layout即可:

代码
  1. class ProjectsController < ApplicationController
  2. layout :user_layout
  3. def index
  4. @projects = Project.find(:all)
  5. render :layout => 'projects'
  6. end
  7. protected
  8. def user_layout
  9. if current_user.admin?
  10. "admin"
  11. else
  12. "application"
  13. end
  14. end
  15. end

上面的index方法指定使用projects layout,当然我们也可以指定不使用layout,如printable页面:
代码
  1. def index
  2. @projects = Project.find(:all)
  3. render :layout => false
  4. end

需要注意的是,这5种layout会按顺序后面的覆盖前面的layout

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9934490/viewspace-982393/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    52
  • 访问量
    265685