2010-08-22 18 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

相關問題