对于每个帖子,我想要有作者和他的页面的链接。所以我需要在帖子中输入用户名:
---
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>
但得到了对象而不是名称值。我也试图在用户之后不使用-
但是与结果相同的对象
答案 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}访问该网站方法,不得不求助于使用实例变量。