J'ai un site basé sur Rails avec une disposition basique à deux colonnes. Sur la droite, il y a une barre latérale avec différents widgets verticaux (disons simplement). Selon la page que vous visitez, les widgets peuvent être inclus, exclus et dans un ordre différent. Ex:Application Rails avec plusieurs mises en page - comment SÉCHER?
page principale (Application)
PAGE CONTENU ...
SIDEBAR
- Widget A
- Widget B
- Widget C
Page X
contenu de la page ...
SIDEBAR
- Widget D
- widget A
- Widget C
page Y
contenu de la page ...
SIDEBAR
- Widget E
- Widget A
- Widget B
- Widget C
En ce moment, la façon dont je l'affichage des widgets spécifiques à la page ne sont pas très SEC. Je crée une mise en page pour chaque page, puis je copie et colle les mêmes partiels HTML et partiels de widgets encore et encore. Ex:
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>
Je fondamentalement juste répéter ce modèle pour les autres mises en page, mais avec les widgets spécifiques à la page. Ne semble pas trop sec. Je pense qu'il doit y avoir un moyen plus efficace de le faire. Aucune suggestion?