Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shopify 可以使用液体吗;其中;具有嵌套属性的数组筛选器?_Shopify_Liquid_Shopify Template - Fatal编程技术网

Shopify 可以使用液体吗;其中;具有嵌套属性的数组筛选器?

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进行赋值

我正在尝试使用块设置过滤块数组。我可以使用以下语法按“type”等属性进行筛选:

{%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”就足够了。