诗歌rails之layout
一般来说layout有如下五种:
gobal layout,controller layout,shared layout,dynamic layout,action layout
dynamic layout
有时候我们需要根据不同的用户角色来使用不同的layout,比如管理员和一般用户,比如博客换肤(也可以用更高级的theme-generator)
action layout
在action中指定layout即可:
关键字: Rails layout content_for 如果我们想根据模板页面更改局部layout,使用content_for即可。
content_for允许模板页面代码放到layout中的任何位置。
比如我们的Rails程序不同的页面有不同的css样式,我们可以在layout里留出位置:
我们用yield :head来给模板页面某段代码留个"座位",再看页面:
gobal layout,controller layout,shared layout,dynamic layout,action layout
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
在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
content_for允许模板页面代码放到layout中的任何位置。
比如我们的Rails程序不同的页面有不同的css样式,我们可以在layout里留出位置:
- <!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 %>
- </div>
- </body>
- </html>
我们用yield :head来给模板页面某段代码留个"座位",再看页面:
- <% content_for :head do %>
- <%= stylesheet_link_tag 'projects' %>
- <% end %>
- <h2>Projects</h2>
- <ul>
- <% for project in @projects %>
- <li><%= project.name %></li>
- <% end %>
content_for :head里面的代码将填充layout里的yield :head。
关键字:使用content_tag(name, content_or_options_with_block = nil, options = nil, escape = true, &block)
Examples
content_tag(:p, "Hello world!")
# => <p>Hello world!</p>
content_tag(:div, content_tag(:p, "Hello world!"), :class => "strong")
# => <div class="strong"><p>Hello world!</p></div>
content_tag("select", options, :multiple => true)
# => <select multiple="multiple">...options...</select>
<% content_tag :div, :class => "strong" do -%>
Hello world!
<% end -%>
# => <div class="strong">Hello world!</div>
[ hide source ]
# File vendor/rails/actionpack/lib/action_view/helpers/tag_helper.rb, line 67
67: def content_tag(name, content_or_options_with_block = nil, options = nil, escape = true, &block)
68: if block_given?
69: options = content_or_options_with_block if content_or_options_with_block.is_a?(Hash)
70: content_tag = content_tag_string(name, capture(&block), options, escape)
71:
72: if block_called_from_erb?(block)
73: concat(content_tag)
74: else
75: content_tag
76: end
77: else
78: content_tag_string(name, content_or_options_with_block, options, escape)
79: end
80: end
莫愁前路无知己,天下无人不识君。