Skip to content

鼓励作者:欢迎 star 或打赏犒劳

列表

👁️ 预览

获取数据列表,对其进行过滤,循环遍历,并使用某个组件显示每个项目。

liquid
{%
  include list.html
  data="citations"
  component="citation"
  filter="category == 'featured'"
  style="rich"
%}
参数描述
data要循环遍历的项目集合,例如 citationspostsmembers 等。如果您的列表有 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'typepackagecategory 不是 featured"显示我的次要包"
role =~ /student/irole 包含 student,不区分大小写"显示我的任何级别的学生"
role =~ /^Senior/roleSenior 开头,区分大小写"显示我的高级成员"
date.between?('2020', '2023')date20202023 之间"显示我在 COVID 期间发表的论文"
publisher.end_with?('Biology')publisherBiology 结尾"显示我在主要生物学期刊上的论文"
alumni ? name === 'Steve McQueen' : true不是 alumni,或者是 alumninameSteve McQueen"隐藏我的过去成员,除非他们超级酷"

尝试更高级的表达式:

在 Ruby Playground 中尝试

过滤器(旧版)

DANGER

旧语法,< v1.3.0

filters 参数是字段/值过滤器的逗号分隔列表,如 field: value, field: value, field: value。只有当所有过滤器都匹配时,项目才被视为匹配。

field 是要检查的数据项的特定字段/键。value 是要比较的值。value 可以是:

示例

过滤字符串显示具有...的项目
role: programmer, alumni: truerole 包含 programmeralumni 包含 true
affiliation: ^CU$affiliation 完全等于 CU
category:未指定 category
description: .+某些指定/定义的 description
date: ^2020date2020 开头
role: ^(?!pi$)role 不等于 pi

如有转载或 CV 的请标注本站原文地址