Shopify 可以使用液体吗;其中;具有嵌套属性的数组筛选器?
我正在尝试使用块设置过滤块数组。我可以使用以下语法按“type”等属性进行筛选:Shopify 可以使用液体吗;其中;具有嵌套属性的数组筛选器?,shopify,liquid,shopify-template,Shopify,Liquid,Shopify Template,我正在尝试使用块设置过滤块数组。我可以使用以下语法按“type”等属性进行筛选: {%assign example=section.blocks |其中:“type”,“photos”%} 我需要做的是按块设置进行过滤,如下所示: {%assign example=section.blocks |其中:settings.collection,collection.handle%} 上面的例子失败了 注意:目前,我正在使用带有for循环和if语句的捕获来完成我需要的任务,然后使用split进行赋值
{%assign example=section.blocks |其中:“type”,“photos”%}
我需要做的是按块设置进行过滤,如下所示:
{%assign example=section.blocks |其中:settings.collection,collection.handle%}
上面的例子失败了
注意:目前,我正在使用带有for循环和if语句的捕获来完成我需要的任务,然后使用split进行赋值-但是代码太臃肿了,而为一个简单的筛选操作执行所有这些操作似乎很可笑。我发现自己一直感觉自己在与液体搏斗,我想我希望它可能比我认为的更优雅。你做错了<代码>其中将仅在根元素上工作。在您的情况下,
节.blocks
是根元素,因此其中
可用于类似节.blocks.abcd\u属性的内容
粗略示例:{%assign example=section.blocks |其中:'collection',collection.handle%}
将加载所有将其集合属性作为collection.handle值的节块
这会奏效的
{% if settings.collection == collection.handle %}
{% assign example = section.blocks %}
{% else %}
{% assign example = '' | split: '' %}
{% endif %}
我对Ruby了解不多,但似乎您将带有点符号的嵌套属性传递给where
过滤器。但是,在使用map
访问嵌套值之后,我测试了将两者混合使用,并且在这种情况下,似乎效果很好
在我的块中有一个名为default
的布尔设置,我使用以下方法获得了最后一个块的设置对象default
设置为true
:
{% assign obj = section.blocks | map: 'settings' | where: 'default' | last %}
当然,您无法获取提取的设置对象之外的数据。为此,我认为您确实需要遍历部分。blocks
并使用if
标记手动查找筛选器。以前使用的map
丢失外部数据,但查找字符串表示法可与where
用于嵌套属性:
例如,使用posts
集合,其中每个.md
文件都有前面的内容:
标题:
是的
下面的liquid
代码片段通过标题过滤存档的帖子。isArchived
:
{% assign archived = site.posts | where: "header.isArchived", true %}
谢谢-这回答了我的问题。我希望liquid可以使用带有嵌套属性的where数组过滤器,但我想不会。而且我没有“做错”,就像我在我的问题中说的,我用的是与你建议的基本相同的逻辑。我希望liquid中有一种语法,可以将嵌套属性与“where”进行比较,一个简单的“no”就足够了。