2010-08-22 19 views
1

我有一个基于Rails的网站,有一个基本的两列布局。在右边是一个有不同的侧栏(我们只是说)垂直小部件。根据您访问的页面,可以将小部件包含在内,排除在外,并且可以按不同的顺序排列。用于离:具有多个页面布局的Rails应用程序 - 如何干起来?

主页(应用)

页面内容...

SIDEBAR

  • 小窗口的
  • 的widget乙
  • 的widgetÇ

页码X

页面内容...

SIDEBAR

  • 的Widget d
  • 小部件
  • 的WidgetÇ

Y形

页面内容...

SIDEBAR

  • 部件e
  • 小部件
  • 的Widget乙
  • 的WidgetÇ

现在我正在显示特定页面的小部件的方法是不是很干。我为每个页面创建一个布局,然后一遍又一遍地复制和粘贴相同的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> 

我基本上只是重复这种模式对其他页面布局,但与特定页面的小部件。看起来不太干。

我在想,必须有一个更有效的方法来做到这一点。有什么建议么?

回答

6

您可以使用一个布局文件为您的所有页面定义双列结构,然后使用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区块。

通用技术描述here

相关问题