2016-05-17 82 views
6

我想使用Jekyll創建一個包含多個章節的手冊,每個章節包含幾個章節,並將每個章節存儲在一個單獨的Markdown文件中。我想index.md看起來是這樣的:我可以在Jekyll中創建嵌套集合嗎?

<ol> 
{% for chapter in site.chapters %} 
    <li> 
    <a href="{{chapter.url}}">{{chapter.title}}</a> 
    <ol> 
    {% for section in chapter.sections %} 
     <li><a href="{{section.url}}">{{section.title}}</a></li> 
    {% endfor %} 
    </ol> 
    </li> 
{% endfor %} 
<ol> 

如果每一章都是在_chapters一個降價文件,我的右行添加​​到_config.yml,我可以在章節重複,從YAML拉出標題字段頭,等等。有沒有一種方法來嵌套這個?我已經嘗試使用各種名字在_chapters下創建子目錄,但是(a)Jekyll沒有把它們當作子集合,並且(b)沒有明顯的地方存儲章節級別的信息(如章節的總標題) 。 (注意:我認爲我可以通過明確枚舉在YAML塊中的章節和章節來完成此操作,或者通過在_data中創建單獨的YAML文件,但我不希望保留該操作列舉與實際章節同步:我希望Jekyll自動獲取更改。)

回答

8

因此,我知道如何做到這一點的最佳方式是顛倒你的想法。

你不寫章節,你寫部分並組織他們到章節

假設你有一個這樣的設置:

  • _sections
    • section01.md
    • section02.md
    • section03.md
    • section04.md

但是你要它輸出這樣的:

  • _site
      • chapter1.html(包含隨後section03.mdsection01.md
      • chapter2.html(包含隨後section02.mdsection04.md

如果是這樣的話,你可以這樣做使用集合。將chapter屬性設置爲section01.md,section03.md01的前置符號,並將chapter屬性設置爲section02.mdsection04.md至的前置符號。

問題是爲章節生成頁面。你需要爲每一章製作一個頁面,但是如果你使用佈局,這並不壞。

這是我使用的佈局(在_layouts/chapter.html):

--- 
layout: default 
--- 

<h1>Chapter {{ page.chapter }}</h1> 

{% for section in site.sections %} 
{% if section.chapter == page.chapter %} 
{{ section.output }} 
{% endif %} 
{% endfor %} 
_chapters

然後,我有chapter01.md,它看起來像這樣:

--- 
chapter: 01 
layout: chapter 
--- 

只是複製到chapter02.md並設置chapter財產到02,現在你有第2章。

使這項工作所需要的唯一的另一件事是更新您的配置:

collections: 
     sections: 
       output: false 
     chapters: 
       output: true 

當您運行jekyll build,你現在必須_site/chapters/chapter01.html_site/chapters/chapter02.html。隨着新章節的創建,它們將被添加到任何章節的主題中。

這真是令人困惑,所以我在http://paddyforan.github.io/jekyll-nested-collections-example/上設置了一個樣本,源代碼爲https://github.com/paddyforan/jekyll-nested-collections-example

+0

謝謝帕迪 - 這有點可怕,但它會起作用。 –

+0

我的榮幸!對不起,花了這麼長時間。使用jekyll插件可以使邊界更好(自動創建章節文件),但這不適用於Github頁面。 – Paddy

+0

我可能很愚蠢,但我無法在源代碼中找到字符串「這是鏈接到第01節」。我錯過了什麼? – mau

相關問題