rails :layout 详解(载)

    <div id="blog_text" class="cnt">一般来说layout有如下五种:<br>gobal layout,controller layout,shared layout,dynamic layout,action layout
假设我们有一个views/projects/index.rhtml页面:<br>代码
    1. <h2>projects</h2> <br>    2. <ul> <br>    3. <% for project in @projects %> <br>    4.    <li><%= project.name %></li> <br>    5. <% end %> <br>    6. </ul>
<br>下面来看看各种layout的用法。
1,global layout<br>添加views/layouts/application.rhtml:<br>代码
    1. <h1>application layout!</h1> <br>    2. <%= yield %>
<br>在layouts目录下添加application.rhtml即可,<%= yield %>即输出我们的projects/index.rhtml页面<br>由于我们的controller都继承自applicationcontroller,所以application.rhtml会先解析
2,controller layout<br>添加views/layouts/projects.rhtml:<br>代码
    1. <h1>projects layout!</h1> <br>    2. <%= yield %>
<br>道理同上,projectscontroller当然会使用同名的projects.rhtml作layout了<br>注意的是controller layout会覆盖global layout
3,shared layout<br>添加views/layouts/admin.rhtml:<br>代码
    1. <h1>admin layout!</h1> <br>    2. <%= yield %>
<br>我们建立了admin layout,然后在需要使用该layout的controller中指定即可:<br>代码
    1. class projectscontroller < applicationcontroller <br>    2.    layout "admin" <br>    3.    <br>    4.    def index    <br>    5.      @projects = project.find(:all) <br>    6.    end <br>    7. end
4,dynamic layout<br>有时候我们需要根据不同的用户角色来使用不同的layout,比如管理员和一般用户,比如博客换肤(也可以用更高级的theme-generator)<br>代码
    1. class projectscontroller < applicationcontroller <br>    2.    layout :user_layout <br>    3.    <br>    4.    def index <br>    5.      @projects = project.find(:all) <br>    6.    end <br>    7.    <br>    8.    protected <br>    9.    <br>10.    def user_layout <br>11.      if current_user.admin? <br>12.        "admin" <br>13.      else <br>14.        "application" <br>15.      end <br>16.    end <br>17. end
5,action layout<br>在action中指定layout即可:<br>代码
    1. class projectscontroller < applicationcontroller  <br>    2.    layout :user_layout  <br>    3.    <br>    4.    def index  <br>    5.      @projects = project.find(:all)  <br>    6.      render :layout => 'projects'  <br>    7.    end  <br>    8.    <br>    9.    protected  <br>  10.    <br>  11.    def user_layout  <br>  12.      if current_user.admin?  <br>  13.        "admin"  <br>  14.      else  <br>  15.        "application"  <br>  16.      end  <br>  17.    end  <br>  18. end
 
 
 
上面的index方法指定使用projects layout,当然我们也可以指定不使用layout,如printable页面:<br>代码
    1. def index <br>    2.    @projects = project.find(:all) <br>    3.    render :layout => false <br>    4. end
需要注意的是,这5种layout会按顺序后面的覆盖前面的layout

你可能感兴趣的:(java,工作)