如何从Jekyll中的帖子引用来访问_config.yml中的对象?

时间:2014-07-29 13:06:32

标签: yaml jekyll liquid

对于每个帖子,我想要有作者和他的页面的链接。所以我需要在帖子中输入用户名:

---
title: "Some Post"
author: user_x
---

并在_config.yml

中有类似的内容
users:
 -
   user_x:
       url: "/some-url"
       name: "Full Name"

拥有地图用户 - >网址和名称,如何在帖子中显示?我试过这个:

<a href="">{{ site.users[ post.author ].name }}</a>

但得到了对象而不是名称值。我也试图在用户之后不使用-但是与结果相同的对象

2 个答案:

答案 0 :(得分:3)

使用page.author,而不是post.author

<a href="">{{ site.users[page.author].name }}</a>

你的Yaml应该是这样的:

users:
  user_x:
    url: "/some-url"
    name: "Full Name"
  user_y:
    url: "/some-other-url"
    name: "A Different Name"

如果您使用的是用户的多个值,则可能需要使用assign

{% assign user = site.users[page.author] %}

<a href="{{ user.url }}">{{ user.name }}</a>

答案 1 :(得分:1)

您可以为此编写一个小插件:

module Jekyll
  module AuthorData
    def author_name(username)
      users = @context.registers[:site].config['users']
      users.detect { |hash| hash.keys.include? username }.values.first['name']
    end

    def author_url(username)
      users = @context.registers[:site].config['users']
      users.detect { |hash| hash.keys.include? username }.values.first['url']
    end

    def author(username, value)
      users = @context.registers[:site].config['users']
      users.detect { |hash| hash.keys.include? username }.values.first[value]
    end

  end
end

Liquid::Template.register_filter(Jekyll::AuthorData)

现在,在index.html内(我测试过的页面),我可以使用以下代码获取作者的姓名和网址:

{% post.author | author_name %}
{% post.author | author_url %}

或者,您可以使用通用过滤器:

{% post.author | author: 'name' %}

YAML前线问题:

作者:&#39; user_x&#39;

_config.yml文件:

users:
  - user_x:
      url: '/test_x'
      name: 'User X'
  - user_y:
      url: '/test_y'
      name: 'User Y'

@context.registers是Jekyll提供对应用内部数据的访问方式,以便在插件中使用。查看protip below the filters docs

PS:我认为那里的文档存在一些不一致 - 或者可能是Jekyll的版本使用了 - 但是我无法通过{{1}访问该网站方法,不得不求助于使用实例变量。