我正在尝试使用Deface的DSL添加一些内容我狂欢的主页#index。
我的文件位于 app / overrides / spree / home / index / add_home_index_steps.html.erb.deface 具有以下内容:
<!-- insert_before 'erb:contains("content_for :sidebar do")' -->
<h1>Hola</h1>
但结果是:
<div id=wrapper" class="row" data-hook>
<aside id="sidebar" class="columns four" data-hook>
<div data-hook="homepage_sidebar_navigation">...</div>
</aside>
<div id="content" class="columns twelve" data-hook>
<h1>Hola</h1>
<div data-hook="homepage_products">...</div>
</div>
</div>
我的期待:
<div id=wrapper" class="row" data-hook>
<h1>Hola</h1>
<aside id="sidebar" class="columns four" data-hook>
<div data-hook="homepage_sidebar_navigation">...</div>
</aside>
<div id="content" class="columns twelve" data-hook>
<div data-hook="homepage_products">...</div>
</div>
</div>
如果我使用insert_after而不是insert_before,结果是:
<div id=wrapper" class="row" data-hook>
<aside id="sidebar" class="columns four" data-hook>
<h1>Hola</h1>
<div data-hook="homepage_sidebar_navigation">...</div>
</aside>
<div id="content" class="columns twelve" data-hook>
<div data-hook="homepage_products">...</div>
</div>
</div>
我很困惑,任何人都可以解释一下,我做错了什么。
答案 0 :(得分:2)
这很容易混淆,所以让我们来看看发生了什么。侧边栏代码是:
<aside id="sidebar" class="columns four" data-hook>
<%= yield :sidebar %>
</aside>
https://github.com/spree/spree/blob/v2.1.2/frontend/app/views/spree/home/index.html.erb
<% content_for :sidebar do %>
<div data-hook="homepage_sidebar_navigation">
<%= render :partial => 'spree/shared/taxonomies' %>
</div>
<% end %>
<div data-hook="homepage_products">
<%= render :partial => 'spree/shared/products', :locals => { :products => @products } %>
</div>
评估完毕后, content_for :sidebar
中的内容将取代yield :sidebar
你的问题是当你在做insert_before时。你明白了:
<h1>Hola</h1>
<% content_for :sidebar do %>
<!-- stuff that goes in to the sidebar -->
<% end %>
<div data-hook="homepage_products">...</div>
content_for可以出现在这个文件的任何一点,它并不重要,因为它只是说收益率的变化。所以在输出中,它将出现在homepage_products div之前,这就是你在输出中得到的结果。
Insert_after执行以下操作:
<% content_for :sidebar do %>
<h1>Hola</h1>
<!-- stuff that goes in to the sidebar -->
<% end %>
<div data-hook="homepage_products">...</div>
所以我希望它出现在被屈服的部分中。像这样:
<aside id="sidebar" class="columns four" data-hook>
<h1>Hola</h1>
<!-- stuff that goes in to the sidebar -->
</aside>
你也看到了这一点。
如果您希望在侧边栏之前显示某些内容(如示例中所示),则应执行不同的覆盖。您应该覆盖spree/shared/_sidebar
和insert_before #sidebar
。
希望能够解决问题。