列出Jekyll中的所有收藏

时间:2015-07-01 20:28:14

标签: jekyll

我正在和Jekyll建立一个杂志网站(v2.5.3)。 the Jekyll site上的文档让我相信我可以列出我网站上的所有馆藏,并在我的_config.yml中为每个馆藏嵌入YAML数据。

_config.yml:

collections:
  issue_001:
    output: true
    permalink: /:title/:path
    title: Rebirth
    date: 2015-07-01
  issue_002:
    output: true
    permalink: /:title/:path
    title: Talking Heads
    date: 2015-08-01

的index.html:

{% for issue in site.collections %}
  <li>
    <h6 class="post-meta">Issue {{ issue.name }} &mdash; {{ issue.date | date: "%b %-d, %Y" }}</h6>

    <h2>
      {{ issue.title }}
    </h2>
  </li>
{% endfor %}

我在主页上出现了两个问题,但我正在访问的每个问题(名称,日期,标题等)都没有出现。我很欣赏这是一个测试版功能,所以只是想问一下这个坏了,还是我做错了?

3 个答案:

答案 0 :(得分:5)

如果有人仍然有此请求,则以下是最新的Jekyll(v3.8.3)中的工作方式:

{% for collection in site.collections %}
  <h2>Items from {{ collection.label }}</h2>
  <ul>
    {% for item in site[collection.label] %}
      <li><a href="{{ item.url }}">{{ item.title }}</a></li>
    {% endfor %}
  </ul>
{% endfor %}

答案 1 :(得分:4)

{% for issue in site.collections %}中,issue是一个包含以下内容的数组:

0 => "issue_001",
1 => Hash
 {"output"=>true,
  "permalink"=>"/:title/:path",
  "title"=>"Rebirth",
  "date"=>#,
  "label"=>"issue_001",
  "docs"=>[#],
  "files"=>[],
  "directory"=>"/home/djacquel/www/test.dev/jekyll/wat/_issue_001",
  "relative_directory"=>"_issue_001"}

访问数据的正确方法是:

{% for issue in site.collections %}
  <li>
    <h6 class="post-meta">
      Issue {{ issue[1].label }}
      &mdash;
      {{ issue[1].date | date: "%b %-d, %Y" }}
    </h6>
    <h2>
      {{ issue[1].title }}
    </h2>
  </li>
{% endfor %}

答案 2 :(得分:0)

第二个; answer from @sparanoid太棒了!在那和默认的Jekyll Theme(极小值)的源代码之间,我能够将后面的内容融合在一起。

第一秒;一个很好的问题,以及如何不增加投票量,这让人感到莫名其妙。

其他许多相关点中的三分之一;我与问题发帖人的路径不同,但是以下代码可能对读者有用。我的用例是想要一种类似于默认Jekyll home布局的列出集合体的方法。

_layouts/named_collection.html

  

请注意,可以通过以下方式下载源链接:单击Raw链接/按钮,然后单击 Ctrl s 保存为常规文本文件,但是,这些链接已及时冻结,因此请确保检查gh-pages分支以获取更新。在这种情况下,输出示例仅是可能内容的示例。可能要使用 Lorem字符串来说明接下来要做什么。

---
layout: default
---
{% comment %}
License note from S0AndS0; an editor in this context.

Minima (where the following code is sourced from), is shared under the
 MIT Lisense, https://github.com/jekyll/minima/blob/master/LICENSE.txt

Thus any alterations to Minima source code is re-shared under the MIT Lisense
{% endcomment %}
{% capture workspace_collections %}
  {% assign collection_name = page.collection_name | default: include.collection_name | default: nil %}
  {% assign target_collection = site[collection_name] %}

  <div class="home">
    {%- if page.title -%}
      <h1 class="page-heading">{{ page.title }}</h1>
    {%- endif -%}

    {{ content }}

    {% assign has_output = False %}
    {%- if target_collection.size > 0 -%}
      {% capture workspace_collection %}
        <h2 class="post-list-heading">{{ page.list_title | default: "Posts" }}</h2>
        <ul class="post-list">
          {%- for post in target_collection -%}
            {%- if page.relative_path == post.relative_path -%}
              {%- continue -%}
            {%- else -%}
              {% assign has_output = True %}
            {%- endif -%}

            <li>
              {%- assign date_format = site.minima.date_format | default: "%b %-d, %Y" -%}
              <span class="post-meta">{{ post.date | date: date_format }}</span>
              <h3>
                <a class="post-link" href="{{ post.url | relative_url }}">
                  {{ post.title | escape }}
                </a>
              </h3>
              {%- if site.show_excerpts -%}
                {{ post.excerpt | markdownify | remove: '<p>' | remove: '</p>' }}
              {%- endif -%}
            </li>
          {%- endfor -%}
        </ul>
      {% endcapture %}

      {%- if has_output == True -%}
        {{- workspace_collection -}}{% assign workspace_collection = nil %}
      {%- endif -%}

    {%- endif -%}
  </div>
{% endcapture %}{{ workspace_collections | strip }}{% assign workspace_collections = nil %}
  

请注意,我不记得我在哪里capture掌握了一些workspace_的技巧,但是strip键入新行和其他格式的恶作剧很费力。如果读者发现是谁造成了这种幻想,请编辑或发表评论。


这种布局的使用与Minima home.html布局的使用非常相似。

administration.md

...从_administration集合中选择最重要的内容看起来...

layout: named_collection
collection_name: administration
title: Administration
list_title: Usage Examples
permalink: /admin/

...导致输出<base-url>/admin/集合列表。

git_shell_commands.md

...从_git_shell_commands集合中选择最重要的内容看起来...

layout: named_collection
collection_name: git_shell_commands
title: Git Shell Commands
list_title: Usage Examples
permalink: /git_shell_commands/

...导致输出<base-url>/git_shell_commands/集合列表。


关于收藏的更多注释

如果我正确地阅读了最新的Jekyll Collections文档,那么从3.7.0版本开始,就可能有一个自定义collections目录,对于这个问题,它可能看起来像是...

ls ~/git/magazine-name/
# ... other files and/or directories
#   issues/
# ... other files and/or directories
#   _config.yml

...,其中issues/目录包含子目录,例如...

ls ~/git/magazine-name/issues/
#   _001/
#   _002/
#   _003/
# ...

...并且_config.yml文件具有...

collections_dir: issues
collections:
  001:
    output: True
    # ...

... 魔术酱collections_dir不是,是使用得分不足的前缀基本目录。关于最后一点的文档大声,例如。 _issues/会度过一段糟糕的时光

我不确定是否需要对先前发布的Liquid代码进行其他调整(我认为不是,但是可能);所以也许先尝试一下。

我建议使用collections_dir的原因是因为在@James Dinsdale's question的情况下,它可能有助于组织更多事情。我个人希望我的gh-pages分支集合为 mirror 提供一些与项目的master分支相同的路径,因此不要尝试测试collections_dir的建议。


关于我的Liquid编码选择的注释

因为我使用的是Minima主题,所以将使用named_collection主题的文件放置在项目的根目录中;默认行为是链接到每个页面顶部的 pages 。廉价的导航。

因为读者可能会将使用named_collection的页面放在与列出的目录相同的目录中,例如...

ls Jekyll_Admin/_administration/
#   _administration/administration.md
# ...

...我已经为某些边缘情况写了Liquid,但是可能没有涵盖所有'em'。在生产中释放类似的东西之前,请确保进行私下测试。