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

戏子无情 提交于 2019-11-30 23:56:07

问题


I would like to include a snippet in a template but only if the snippet file exist. Is there any way I can do it?

Now I'm just using:

{% include 'snippetName' %}

But this throws the error:

Liquid error: Could not find asset snippets/snippetName.liquid

The reason I need such a functionality is because I have a background process that adds the snippet later on.


回答1:


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.




回答2:


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



回答3:


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




回答4:


@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.




回答5:


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.



来源:https://stackoverflow.com/questions/14667270/shopify-liquid-how-can-i-conditionally-include-snippets-in-shopify-liquid

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