我有一个产品列表,我想在产品 Feed 中展示广告。
我想要类似的东西:
<div id="container"> <div id="product">Bla..</div> <div id="product">Bla..</div> <div id="product">Bla..</div> </div> <div id="add"> Adsense Stuff </div> <div id="container"> <div id="product">Bla..</div> <div id="product">Bla..</div> <div id="product">Bla..</div> <div id="product">Bla..</div> <div id="product">Bla..</div> </div>
在ERB,我会:
<div id="container"> <% productes.each_with_index do |product,index| %> <div id="product"><%= product %></div> <% if index == 2 %> </div> <div id="add"> Adsense Stuff </div> <div id="container"> <% end %> <% end %> </div>
你如何将其翻译为 Haml 或 Slim?
我不想在两个循环中打破循环,原因有两个:我不知道产品按页面计数,并且我有一些更复杂的代码,它们使用与 Rails 相同的 HTML 技巧cycle()帮手。因此,找到一种技巧来实现这一目标将对我有很大帮助。
cycle()
Haml 允许您在需要时编写原始 HTML 作为输出。虽然很奇怪,但您可以使用它来实现您的目标,就像您对 Erb 所做的那样:
TEMPLATE = ' .container - products.each_with_index do |product,index| - if index == 2 </div> <div class="ad">AdSense Stuff</div> <div class="container"> .product< = product ' require 'haml' products = %w[ cat box kitten shoes hounds ] puts Haml::Engine.new(TEMPLATE).render binding #=> <div class='container'> #=> <div class='product'>cat</div> #=> <div class='product'>box</div> #=> </div> #=> <div class="ad">AdSense Stuff</div> #=> <div class="container"> #=> <div class='product'>kitten</div> #=> <div class='product'>shoes</div> #=> <div class='product'>hounds</div> #=> </div>
缩进看起来很奇怪,但您可以看到有两个容器,其中一个容器外面都装有 AdSense 内容。