是否可以将参数传递给 Jekyll 中的集合成员

Is it possible to pass parameters to collection members in Jekyll

我有一个名为操作码的集合,并创建了一个循环来生成所有成员的列表。缩写形式:

{% assign ops = site.opcodes | where: 'pst', 1 %}
{% for opcode in ops %}
<div id="op{{ opcode.n }}" class="opcode">
  <span class="op-data">#{{ opcode.n }} ({{ opcode.n | dec_to_hex }})</span>
  {{ opcode.content }}
{% endfor %}

个别成员是 html 文件,前面有一些内容。我将生成多个列表,成员有时需要稍作更改。看起来在循环运行时,它们的内容已经生成了。我试着影响他们的 front matter 或 site 变量,但这一切都太晚了,none of liquid if 语句起作用了。变量为空或为原始值。

有没有办法使这项工作起作用,在呈现内容之前以某种方式将参数传递给成员?

显而易见的解决方法是复制有问题的文件并对其进行编辑,因为我已经对它们使用 "where" 子句 select。问题是关于任何更好的方法。

编辑:这是各个文件的样子:

---
title: bla
pst = 0
---
bla bla
{% if x == "big" %}
  blu blu
{% else %}
  ble ble
{% endif %}

x 是我想从第一个循环开始的外部设置。

您可以使用 front matter default configuration 根据包含的文件夹设置变量。

─ _myCol
   ├── cat1
   │   ├── item0.md
   │   └── item1.md
   └── cat2
       ├── item2.md
       └── item3.md

如果您想为 myCol 集合中的所有项目设置变量 myVar,您可以:

# _config.yml
defaults:
  - scope:
      type: myCol
    values:
      myVar: "YOLO"

现在,如果您想根据包含的文件夹为 myVar 设置不同的值,请添加:

- scope:
    path: _myCol/cat1
  values:
    myVar: "TOTO"

然后您可以在集合的项目布局中使用此变量,如下所示:

{% if page.myVar == "YOLO" %}
  blu blu
{% else %}
  ble ble
{% endif %}

我又看了一遍,没有找到解决方案,所以答案似乎是:不,不可能在渲染之前将参数传递给集合成员。