Shopify liquid:我如何有条件地在Shopify液体中包含片段?

时间:2013-02-02 22:37:27

标签: api include code-snippets shopify liquid

我想在模板中包含一个代码段,但仅在代码段文件存在时才包含。我有什么方法可以做到吗?

现在我只是使用:

{% include 'snippetName' %}

但这引发了错误:

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

我需要这样的功能的原因是因为我有一个后台进程,稍后会添加该代码段。

6 个答案:

答案 0 :(得分:21)

我自己有这个问题。这是我的解决方案:

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

基本上将代码段的内容捕获为变量。 如果没有代码片段,Shopify会生成错误:

  

液体错误:无法找到资产   片段/加罗林-火石reviews.liquid

因此,请检查是否生成了...如果是,请不要打印代码段 :d

当然,如果您希望您的代码段包含“Liquid error”或Shopify更改错误消息,则会中断。

答案 1 :(得分:3)

延伸Jon的回答;

创建一个名为snippet.liquid的文件

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

然后当您想要仅包含文件时

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

答案 2 :(得分:0)

@vovafeldman不确定为什么你不能有一个空白片段,但是没有文件存在。

我能想到的唯一其他选择是因为您正在使用BG流程生成代码段(我假设上传它),您始终可以使用模板API上传包含代码段的模板版本同时。

答案 3 :(得分:0)

或者,您可以创建自己的标记,在尝试处理文件之前检查文件是否存在。

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

答案 4 :(得分:0)

使用Jon或a.wmly上面列出的代码仍然给我错误。但是,只需编写

{% include 'snippet_name' %}

工作正常。

请注意,这仅适用于“ snippets /”文件夹中的文件。因此,例如,模板无法使用此方法。

答案 5 :(得分:0)

好的,在 2021 年来到这里。

include 语法已弃用且不常使用,也扩展了@a.wmly 答案,这应该是用渲染替换 include 的最新语法:

{% capture snippet_content %}{% render 'your-snippet-name' %}{% endcapture %}
{% if snippet_content contains "Could not find asset" %}
    {% comment %} do nothing {% endcomment %}
{% else %}
    {% render 'your-snippet-name' %}
{% endif %}

包含与渲染的参考:https://shopify.dev/docs/themes/liquid/reference/tags/deprecated-tags#include