繁体   English   中英

具有多个页面布局的Rails应用程序-如何干燥?

[英]Rails app with multiple page layouts - how to DRY up?

我有一个基于Rails的站点,具有基本的两列布局。 右侧是带有不同(仅说)垂直小部件的边栏。 根据您访问的页面,可以包括,排除和以不同的顺序排列小部件。 例如:

主页(应用程序)

页面内容...

侧边栏

  • 小部件A
  • 小部件B
  • 小部件C

第X页

页面内容...

侧边栏

  • 小部件D
  • 小部件A
  • 小部件C

页Y

页面内容...

侧边栏

  • 小部件E
  • 小部件A
  • 小部件B
  • 小部件C

现在,我显示特定于页面的小部件的方式不是很干。 我为每个页面创建一个布局,然后一遍又一遍地复制和粘贴相同的HTML局部和小部件局部。 例如:

application.html.erb

<%= render :partial => 'shared/html_header' %>

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

    <%= render :partial => "shared/head" %>     

    <body>                        
        <div id="outer">

            <%= render :partial => 'shared/banner' %>
            <%= render :partial => 'shared/nav' %>

            <div id="main">
                <table cellpadding="0" cellspacing="0" border="0" style="width:100%;">
                  <tr style="vertical-align:top;">

                   <td style="width:759px;">
                    <%= render :partial => 'shared/content' %>
                  </td>

                        <td><%= image_tag("spacer.gif", :width => "5") %></td>

                        <td style="width:252px;">
                            <%= render :partial => 'shared/widget_a' %>
                            <%= image_tag("spacer.gif", :height => "10") %>

                            <%= render :partial => 'shared/widget_b' %>
                            <%= image_tag("spacer.gif", :height => "10") %>

                            <%= render :partial => 'shared/widget_c' %>
                            <%= image_tag("spacer.gif", :height => "10") %>

                        </td>
                    </tr>
                </table>
            </div>
            <%= render :partial => 'shared/footer' %>
        </div>
            <%= render :partial => 'shared/user_voice_widget_script' %>
            <%= render :partial => 'shared/google_analytics_script' %>
    </body> 
</html>

我基本上只对其他页面布局重复此模式,但使用页面特定的小部件。 似乎不太干。

我认为必须有一种更有效的方法来执行此操作。 有什么建议么?

您可以使用一个布局文件来定义所有页面的两列结构,然后使用Rail的content_for助手根据所访问的页面在上下文中填充侧边栏。 然后,唯一的页面特定信息是侧栏详细信息,而不是一遍又一遍地重复整个布局。

在您的(单个)应用程序布局中:

<td style="width:252px;">
  <%= yield :sidebar %>
</td>

页面中的某处:

<% content_for :sidebar do %>
  <%= render :partial => 'shared/widget_a' %>
  <%= image_tag("spacer.gif", :height => "10") %>

  ...

<% end %>

如果足够多的窗口小部件组合经常一起出现,则可以考虑将其render指令放到局部中,并在content_for块中使用它们。

此处介绍通用技术

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM