
列表
👁️ 预览
获取数据列表,对其进行过滤,循环遍历,并使用某个组件显示每个项目。
liquid
{%
include list.html
data="citations"
component="citation"
filter="category == 'featured'"
style="rich"
%}
参数 | 描述 |
---|---|
data | 要循环遍历的项目集合,例如 citations 、posts 、members 等。如果您的列表有 date 字段,它也会按从最新到最旧的顺序排序,并按年份分组。 |
component | 用于显示列表中每个项目的组件。您的 data 中的字段应与此组件接受的参数匹配(除了 style ,见下文)。 |
filter | 按任意字段和值过滤您的 data 。详细说明见下文。 |
style | 自动传递给列表中每个组件的 style 参数,这样您就不必在每个 data 项上重复设置它。这是唯一以这种方式工作的字段,因为其他字段在每个项目中可能不同,但您通常希望列表中的 style 相同。 |
从技术上讲,您可以将任何结构的 data
和任何 component
与列表组件一起使用,但默认情况下,模板附带了几个用于常见需求的占位符数据列表和匹配组件。
过滤器
INFO
新语法,v1.3.0+
filter
参数提供了一种灵活的方式来过滤列表组件显示的项目。它可以是任何有效的 Ruby 表达式。对于每个项目,如果表达式为真,则显示该项目;否则,隐藏它。
您的表达式可以获取/检查任何 data
列表中任何项目上的任何字段。只需按其名称引用字段,但使用 snake_case
格式(任何非字母字符都替换为 _
)。您还可以从 item
(一个哈希)获取其未修改名称的字段。如果表达式引用的内容不是项目上的字段,它将被视为 nil
(空)。
例如,如果您的 data
看起来像这样:
yaml
# ... 前一个项目
# 当前过滤器正在查看的项目
- id: abc
Some-Field-123: xxx
# ... 另一个项目
- id: def
Some-Field-123: yyy
optional-field: Lorem ipsum
...您可以在 filter=""
中这样引用:
ruby
# snake_cased 字段名
Some_Field
# 原始字段名称
item['Some-Field-123']
# 可能存在于其他项目上但不存在于此项目上的字段
optional_field # 被视为 `nil`(空)
示例
过滤表达式 | 显示项目,如果... | 示例场景 |
---|---|---|
repo | 有某个 repo 字段 | "显示有仓库链接的工具" |
!id | 没有 id 字段 | "显示我的手动引用" |
type == 'package' and category != 'featured' | type 是 package 且 category 不是 featured | "显示我的次要包" |
role =~ /student/i | role 包含 student ,不区分大小写 | "显示我的任何级别的学生" |
role =~ /^Senior/ | role 以 Senior 开头,区分大小写 | "显示我的高级成员" |
date.between?('2020', '2023') | date 在 2020 和 2023 之间 | "显示我在 COVID 期间发表的论文" |
publisher.end_with?('Biology') | publisher 以 Biology 结尾 | "显示我在主要生物学期刊上的论文" |
alumni ? name === 'Steve McQueen' : true | 不是 alumni ,或者是 alumni 且 name 是 Steve McQueen | "隐藏我的过去成员,除非他们超级酷" |
尝试更高级的表达式:
过滤器(旧版)
DANGER
旧语法,< v1.3.0
filters
参数是字段/值过滤器的逗号分隔列表,如 field: value, field: value, field: value
。只有当所有过滤器都匹配时,项目才被视为匹配。
field
是要检查的数据项的特定字段/键。value
是要比较的值。value
可以是:
- 用于部分匹配的普通字符串。
- 留空以匹配未指定的字段。
- Ruby 风格的正则表达式字符串,用于更复杂的匹配。
示例
过滤字符串 | 显示具有...的项目 |
---|---|
role: programmer, alumni: true | role 包含 programmer 且 alumni 包含 true |
affiliation: ^CU$ | affiliation 完全等于 CU |
category: | 未指定 category |
description: .+ | 某些指定/定义的 description |
date: ^2020 | date 以 2020 开头 |
role: ^(?!pi$) | role 不等于 pi |