У меня есть Rails-сайт с базовым макетом из двух колонок. Справа находится боковая панель с разными (скажем так) вертикальными виджетами. В зависимости от того, какую страницу вы посещаете, виджеты могут быть включены, исключены и в другом порядке. Например:
Главная страница (Приложение)
СОДЕРЖАНИЕ СТРАНИЦЫ ...
SIDEBAR
- Виджет A
- Виджет B
- Виджет C
Страница X
СОДЕРЖАНИЕ СТРАНИЦЫ ...
SIDEBAR
- Виджет D
- Виджет A
- Виджет C
Страница Y
СОДЕРЖАНИЕ СТРАНИЦЫ ...
SIDEBAR
- Виджет 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>
Я просто повторяю этот шаблон для других макетов страниц, но с виджетами, специфичными для страницы. Не кажется слишком сухим.
Я думаю, что должен быть более эффективный способ сделать это. Есть предложения?