我想在模板中包含代码段,但前提是代码段文件存在。有什么办法可以做到吗?
现在我只是使用:
{% include 'snippetName' %}
但这会引发错误:
Liquid error: Could not find asset snippets/snippetName.liquid
我需要这样的功能的原因是因为我有一个后台进程,稍后会添加代码片段。
我自己也有这个问题。这是我的解决方案:
{% capture the_snippet_content %}{% include the_snippet %}{% endcapture %}
{% unless the_snippet_content contains "Liquid error" %}
{% include reviews_snippet %}
{% endunless %}
基本上将代码段的内容捕获为变量。如果没有代码段,Shopify 会生成错误:
液体错误:找不到资产 片段/Caroline-flint-reviews.liquid
因此,请检查它是否生成了...如果是这样,请不要打印代码段:D
当然,如果您希望代码段包含"液体错误"或Shopify更改错误消息,这将中断。
乔恩的答案;
创建一个名为 snippet.liquid 的文件
{% capture snippet_content %}{% include snippet %}{% endcapture %}
{% unless snippet_content contains "Liquid error" %}
{{ snippet_content }}
{% endunless %}
然后,当您只想包含存在的文件时
{% include 'snippet' with 'filename_of_include' %}
好的,2021 年来这里。
包含语法已弃用且不常用,也扩展了@a.wmly 答案,这应该是用 render 替换包含的最新语法:
{% 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
或者,您可以创建自己的标签,在尝试处理文件之前检查文件是否存在。
https://github.com/Shopify/liquid/wiki/Liquid-for-Programmers#create-your-own-tags
@vovafeldman 不知道为什么你不能有一个空白片段,但没有文件存在。
我能想到的唯一其他选择是,由于您正在使用 BG 流程来生成代码段(我假设上传它),因此您始终可以使用模板 API 同时上传包含代码段的模板版本。
使用上面列出的代码 Jon 或 a.wmly 仍然给我错误。然而,简单地写
{% include 'snippet_name' %}
工作得很好。
请注意,这仅适用于位于"片段/"文件夹中的文件。因此,例如,模板无法使用此方法。