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' %}

работала просто отлично.

обратите внимание, что это работает только для файлов, расположенных в папке "фрагменты/". Таким образом, шаблоны, например, не работали с использованием этого метода.