在Liquid标签中使用正面内容数据



我有一个项目在11使用液体模板。它包括一个图片库,使用官方插件响应图像,通过一个短代码调用生成图像标记与以下参数:

{% for p in collections.projects %}
{% for i in p.data.images %}
{% image i, "alt text", "output path", "class list", "sizes" %}
{% endfor %}
{% endfor %}

(以"{% image…"是实际的短代码函数)

只要我"手动"提供参数,只有迭代器变量(I)来自for语句,一切都可以正常工作。但是,在某些情况下,我需要从标记内容文件的前端获取图像路径、所有文本或输出路径。在本例中,我不想遍历项目p的图像,而只想使用p.data.images[0]获取数组中的第一个图像。

我首先尝试了最直接的方法

{% image p.data.images[0], p.data.alts[0] , p.data.outs[0], "class list", "sizes" %}

但是这不起作用,而是给了我一个无效的语法错误(指向第一个参数)。

我还尝试在前面的语句中设置变量,像这样:

{% assign path = p.data.path %}
{% assign img = p.data.images[0] %}
{% image img, "alt text", path, "class list", "sizes" %}

但是这给了我一个错误声明"src"(短代码中的第一个位置参数)是必需的。我知道p。data。path和p。data的数据。images[0]在这里是因为我可以像这样打印它作为对象:

{{ p.data.path }}
{{ p.data.images[0] }}

我哪里做错了?一定有一种方法可以让我在这些Liquid标签中访问我的前文数据,对吗?为什么我不能这样做呢?例如:

{% for p in collections.projects %}
{% image p.data.images[0], p.data.alts[0], p.data.outs[0], "class list", "sizes" %}
{% endfor %}

解决方案:

正如@person_v1.32的注释所暗示的那样,问题是并非集合的所有元素都定义了可访问的字段。因此,我试图做的是通过在短代码周围添加if语句来解决,如下所示:

{% for p in collections.projects %}
{% if p.data.images and p.data.path %}
{% assign img = p.data.images[0] %}
{% assign path = p.data.path %}
{% image img, "alt", path, "class", "" %}
{% endif %}
{% endfor %}

最新更新