Shopify liquid: How can I conditionally include snippets in Shopify liquid?

浪尽此生 提交于 2019-12-01 03:38:46

Had this problem myself. This was my solution:

{% capture the_snippet_content %}{% include the_snippet %}{% endcapture %}
{% unless the_snippet_content contains "Liquid error" %}
  {% include reviews_snippet %}
{% endunless %}

Basically capture the snippet’s content as a variable. If there is no snippet Shopify generates the error:

Liquid error: Could not find asset snippets/caroline-flint-reviews.liquid

So check to see if it’s generated that… if so don’t print the snippet :D

Of course this would break if you intended your snippet to include "Liquid error" or if Shopify ever change the error message.

Extending on Jon's answer;

Create a file called snippet.liquid

{% capture snippet_content %}{% include snippet %}{% endcapture %}
{% unless snippet_content contains "Liquid error" %}
  {{ snippet_content }}
{% endunless %}

Then when you want to include a file only if it exists

{% include 'snippet' with 'filename_of_include' %}

Alternatively, you could create your own tag which does a check on the existence of the file, before attempting to process it.

https://github.com/Shopify/liquid/wiki/Liquid-for-Programmers#create-your-own-tags

@vovafeldman Not sure why you can't have a blank snippet, but there's no file exists.

The only other option I can think of is since you are using a BG process to generate the snippet (and I assume upload it), you can always use the template API to upload the version of the template that includes the snippet at the same time.

Using the code listed above by Jon or a.wmly both still gave me errors. However, simply writing

{% include 'snippet_name' %}

worked just fine.

Note that this only worked for files located in the "snippets/" folder. So Templates, for instance, did not work using this method.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!