Shopify liquid: как я могу условно включать фрагменты в Shopify liquid?
Я хотел бы включить фрагмент в шаблон, но только если файл фрагмента существует. Я могу это сделать?
теперь я просто использую:
{% include 'snippetName' %}
но это вызывает ошибку:
Liquid error: Could not find asset snippets/snippetName.liquid
причина, по которой мне нужна такая функциональность, заключается в том, что у меня есть фоновый процесс, который добавляет фрагмент позже.
5 ответов
У меня была эта проблема. Вот мое решение:--2-->
{% capture the_snippet_content %}{% include the_snippet %}{% endcapture %}
{% unless the_snippet_content contains "Liquid error" %}
{% include reviews_snippet %}
{% endunless %}
в основном захват содержимого фрагмента как переменной. Если нет фрагмента Shopify генерирует ошибку:
Liquid ошибка: не удалось найти актив фрагменты / caroline-flint-обзоры.жидкость
поэтому проверьте, не сгенерировано ли это... если да, не печатайте фрагмент : D
конечно, это сломается, если вы предполагали, что ваш фрагмент будет включать "жидкую ошибку" или если Shopify когда-либо изменить сообщение об ошибке.
расширение ответа Джона;
создайте файл с именем snippet.жидкость
{% capture snippet_content %}{% include snippet %}{% endcapture %}
{% unless snippet_content contains "Liquid error" %}
{{ snippet_content }}
{% endunless %}
затем, когда вы хотите включить файл, только если он существует
{% include 'snippet' with 'filename_of_include' %}
@vovafeldman не уверен, почему вы не можете иметь пустой фрагмент, но файла не существует.
единственный другой вариант, который я могу придумать, так как вы используете процесс BG для создания фрагмента (и я предполагаю, что загрузить его), вы всегда можете использовать API шаблона для загрузки версии шаблона, которая включает фрагмент в то же время.
кроме того, вы можете создать свой собственный тег, который проверяет наличие файла, прежде чем пытаться его обработать.
https://github.com/Shopify/liquid/wiki/Liquid-for-Programmers#create-your-own-tags
используя код, указанный выше Jon или a.wmly оба по-прежнему давали мне ошибки. Однако, просто писать
{% include 'snippet_name' %}
работала просто отлично.
обратите внимание, что это работает только для файлов, расположенных в папке "фрагменты/". Таким образом, шаблоны, например, не работали с использованием этого метода.