首页 文章

可重复使用的Jekyll零件来自数据文件

提问于
浏览
2

Jekyll Docs之后,我开发了一个 people.yml 文件:

johnsmith:
  name: John Smith
  title: Director
  image: img/johnsmith.jpg

janedoe:
  name: Jane Doe
  title: Coordinator
  image: img/janedoe.jpg

如果我循环通过人...

{% for person in site.data.people %}
  <p>{{ person }}</p>
{% endfor %}

......我得到了这些输出:

johnsmith{"name"=>"John Smith", "title"=>"Director", "image"=>"img/johnsmith.jpg"}
janedoe{"name"=>"Jane Doe", "title"=>"Coordinator", "image"=>"img/janedoe.jpg"}

但是,当我尝试从yaml文件中只访问一个成员时......

{% assign person = site.data.people['janedoe'] %}

...我得到的数据略有不同:

{"name"=>"Jane Doe", "title"=>"Coordinator", "image"=>"img/janedoe.jpg"}

我拿了这些信息,然后我开始制作一个 person-card.html 包括:

<div>
  <img src="{{ person[1].image }}" alt="{{ person[1].name }}">
</div>
<div>
  <p>{{ person[1].name }}</p>
  <p>{{ person[1].title }}</p>
</div>

在具有访问数据文件的循环的页面上,它可以工作 . 相反,如果我将它与从前面传入的人一起使用它,它就不起作用,因为必须删除索引 . 将其更改为有效:

---
layout: default
person: janedoe
---
{% assign person = site.data.people[page.person] %}
<div>
  <img src="{{ person.image }}" alt="{{ person.name }}">
</div>
<div>
  <p>{{ person.name }}</p>
  <p>{{ person.title }}</p>
</div>

My question - given the people.yml file above, how can I make a reusable include that works in either a for loop or with a single record from people.yml passed in through front matter as in the examples above?

1 回答

  • 1

    循环:

    {% for people in site.data.people %}
        {% assign person = people[1] %}
        {% include person-card.html %}
    {% endfor %}
    

    注意我们只是将有用的部分(人[1])分配给人 .

    _includes/person-card.html 包括:

    <div>
      <img src="{{ person.image }}" alt="{{ person.name }}">
    </div>
    <div>
      <p>{{ person.name }}</p>
      <p>{{ person.title }}</p>
    </div>
    

    简的页面:

    ---
    layout: person
    person: janedoe
    ---
    

    _layouts/person.html 布局:

    ---
    layout: default
    ---
    {% assign person = site.data.people[page.person] %}
    {% include person-card.html %}
    

相关问题