我用Twig創建了一些模板並且遇到了問題。 我正在嘗試加載一段在整個網上商店中使用過幾次的html。所以我的想法是創建一個可重用的代碼片段,我可以在需要時隨時加載。樹枝設置可重複使用的一段html
我面臨的問題是,當我做一個for循環,然後包括那段代碼,我得到一個空的返回。換句話說,我的代碼無法識別for循環中每個產品需要加載的數據。它返回空信息框。
澄清:
我有一個主模板的index.html它調用的一個片段,包括一些產品(不看雨擴展!!):
{% if featured %}
{% include 'snippets/products.rain' with {'products': featured, 'type': 'grid'} %}
{% endif %}
我products.rain摘錄如下:
{% if type %}
{% if type == 'grid' %}
{% for product in products %} {# Products in this case = feautured products #}
<li class="item clearfix">.... etc etc .... </li>
{% endfor %}
{% elseif type == 'other-layout' %}
<div class="item">.... etc etc .... </div>
{% endif %}
{% endif %}
在for循環中存在的HTML這對95%相同,每個for循環。我想將該代碼放入可包含在for循環中的block
內。
所以我所做的就是:
{% set product_html %}
.... a lot of html ....
<a href="{{ product.url | url }}" title="{{ product.fulltitle }}">
<img src="{{ product.image }}" width="100" height="100" alt="{{ product.fulltitle }}"/>
</a>
{% endset %}
然後包括在for循環,像這樣:
{% if type %}
{% if type == 'grid' %}
{% for product in products %} {# Products in this case = feautured products #}
<li class="item clearfix">{{ product_html | raw }}</li>
{% endfor %}
{% elseif type == 'other-layout' %}
<div class="item">{{ product_html | raw }}</div>
{% endif %}
{% endif %}
然而,這返回一個空product.image
和空product.fulltitle
但是設置HTML 。我試過set block
,但是結果相同。
有什麼我做錯了....?
用'macros'有趣的方法。從未想過...... thx! 「宏」對包含有任何性能優勢嗎?或者,每次只呈現該html可能更好?或者它實際上並不重要你使用什麼?我還在學Twig,沒有太多的參考。我問這個問題,因爲我想幹淨的代碼和最好/最快的性能:) – Meules