10

我想在模板中包含一个片段,但前提是片段文件存在。有什么办法可以做到吗?

现在我只是在使用:

{% include 'snippetName' %}

但这会引发错误:

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

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

4

6 回答 6

24

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

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

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

Liquid 错误:找不到资产片段/caroline-flint-reviews.liquid

所以检查它是否生成......如果是这样,请不要打印代码段:D

当然,如果您希望您的代码段包含“液体错误”或者 Shopify 曾经更改错误消息,这将中断。

于 2013-03-26T11:08:41.007 回答
4

扩展乔恩的答案;

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

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

然后,当您只想包含一个文件时,如果它存在

{% include 'snippet' with 'filename_of_include' %}
于 2016-09-08T09:33:15.173 回答
2

好的,2021年来这里。

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

{% 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

于 2021-03-03T07:38:22.647 回答
1

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

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

于 2013-07-11T03:54:03.670 回答
0

@vovafeldman 不知道为什么你不能有一个空白片段,但不存在文件。

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

于 2013-02-03T22:08:37.030 回答
0

使用 Jon 或 a.wmly 上面列出的代码仍然给我错误。然而,简单地写

{% include 'snippet_name' %}

工作得很好。

请注意,这只适用于位于“snippets/”文件夹中的文件。因此,例如,模板不能使用这种方法工作。

于 2018-06-19T13:25:09.797 回答