2016-08-16 88 views
0

我有一個名爲opcodes的集合,並創建了一個循環來生成所有成員的列表。縮寫形式:是否有可能將參數傳遞給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文件。我將生成多個列表,並且成員有時需要稍微更改。它看起來像循環運行時,它們的內容已經生成了。我試圖影響他們的前置事項或站點變量,但是這太遲了,沒有任何流動的if語句工作。這些變量要麼是空的,要麼是原始值。

有沒有辦法讓這項工作,以某種方式傳遞參數給成員之前,他們的內容呈現?

明顯的問題是隻複製有問題的文件並編輯它們,因爲我已經使用「where」子句來選擇它們。問題是關於任何更好的方法。

編輯:這是個別文件什麼樣子:

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

x是想什麼,我到外部設置,從第一循環。

+0

不是很容易理解你的問題。你可以在你的句子中添加一些輸入數據,變量名稱和期望的輸出嗎?它可以幫助理解錯誤。 –

+0

我已添加集合成員的簡化版本。 – lynxlynxlynx

回答

0

我已經看了一遍,但沒有找到解決方案,所以答案似乎是:不,在渲染之前無法將參數傳遞給集合成員。

0

您可以使用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 %} 
+0

但是,這與定義不同的前端變量相同 - 不需要額外的文件夾和重複的項目。此外,從循環外部改變frontmatter變量沒有效果,據推測,因爲內容已經被渲染。 – lynxlynxlynx

+0

默認配置+文件夾允許一點自動化。但是你可以自由地使用前面的內容編輯。但我仍然不明白你的內容有什麼問題。哪部分內容應該是「動態的」,以及如何? –

+0

在你的情況「page.myVar」,我會在我的第一個片段的循環之前設置。將會有大約6頁使用相同的_layout_,有些則需要設置該變量或其他變量以稍微更改該項目。 – lynxlynxlynx

相關問題