Я создаю несколько шаблонов с Twig и имею проблему. Я пытаюсь загрузить часть html, которая используется несколько раз в Интернете. Поэтому моя идея - создать многократно используемый фрагмент кода, который я могу загружать каждый раз, когда это необходимо.Twig set многоразовая часть 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 %}
в течение цикла есть HTML, что это на 95% такой же, как в каждом цикл. Я хочу разместить этот код внутри block
, который может быть включен в циклы for.
Так что я сделал:
{% 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 %}
И затем включен в цикл, например, так:
{% 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 %}
Однако это возвращает HTML, который установлен, однако с пустым product.image
и пустой product.fulltitle
,
Я пробовал то же самое с set block
, но имеет тот же результат.
Есть ли что-нибудь, что я делаю неправильно .... ??
Интересный подход с 'macros'. Никогда не думал об этом ... THX! Включены ли 'макросы' какие-либо преимущества? Или, может быть, лучше просто отображать этот html каждый раз? Или это на самом деле не имеет значения, что вы используете? Я все еще изучаю Twig и не имею много ссылок. Этот вопрос я задал, потому что хочу чистый код и лучшую/быструю производительность :) – Meules