Tob*_*olb 6 jekyll jekyll-extensions yaml-front-matter
我们知道Jekyll可以使用像前面这样的前面的物质变量tags,categories然后用它们来访问它们site.tags并site.categories使用液体迭代它们.现在我的问题是我无法使用像author(因为site.authors)这样的自定义前端变量这样做,因为Jekyll不会以列表格式存储它.这使得分页非常困难.
我看过的每个解决方案即
需要我硬编码的作者列表来_config.yml或其他一些.yml(即_data/authors.yml).这里的问题是我没有使用固定的作者列表.作者列表需要更新,当我在服务器运行时输入带有前端标签author: exampleAuthor或作者列表的另一篇文章(如每个帖子的多个作者,当前只能使用categories和tags也可以).它可以很好地处理标签和类别,但不能像作者那样使用自定义标签.
最简单的解决方案是使用一个site.authors列表进行迭代,然后使用ruby插件扩展它.
我没有找到一个为我提供解决方案的插件,并认为这是一个常见的问题,我可能不是第一个拥有的.
然后,我在写我自己的红宝石插件(这是很难在它自己的,因为缺少文档.也许我是哑巴谷歌,但资源,我发现那里非常有限,根本不足以引导您完成整个过程)但必须有一个原因,为什么这么难做,使得所有现有的解决方案都需要对作者列表进行硬编码.yml(或者.json,大多数人.yml因某种原因而去).
这样做是出于对我的问题,因为我只想在与它的作者姓名职位扔后来和操纵.yml(我的印象中yml,一旦启动了服务器,如文件不会被编译_config.yml,正确我,如果我错了)会适得其反,因为它需要你重新启动服务器来编译它们.
甚至非常高级的插件,如jekyll-paginate-v2(我成功地用标签和类别对帖子进行分页)也没有解决方案,因为这个问题描述了.他被建议滥用类别变量按作者分页,这是一种绝望的解决方法.
我已经找到了可以用集合完成的建议,但这似乎不可行.主要是由于它们的实现性质:
它们需要对作者列表进行硬编码(同样,我不希望这样.我没有固定的作者列表.所有作者信息都必须来自前面 -在/_posts目录.md文件中的问题)到目前为止,我看不到如何使用集合.但是我愿意接受建议.
编辑:我在Jekylls github页面上发现了这个过时的问题,其中强调人们正在尝试做同样但无济于事.这在过去4年中是否可行?
对于仍在寻找方法的人
author: name在前面的内容即可自动生成作者页面,我构建了一个jekyll-auto-authors与 同步工作的插件jekyll-paginate-v2,以启用作者自动页面和分页。
最低限度的设置说明:
安装插件:
group :jekyll_plugins do
# other gems
gem "jekyll-paginate-v2" # reqiured for jekyll-auto-authors to work
gem "jekyll-auto-authors"
end
Run Code Online (Sandbox Code Playgroud)
启用它:
plugins:
# other plugins
- jekyll-paginate-v2
- jekyll-auto-authors
Run Code Online (Sandbox Code Playgroud)
使用作者数据创建数据文件,例如使用_data/authors.yml:
johndoe:
name: "John Doe"
bio: "John Doe is a software engineer."
email: "john@example.com"
socials:
github: "john-doe"
twitter: "john_doe"
janedoe:
name: "Jane Doe"
bio: "Jane Doe is a systems engineer."
email: "jane@example.com"
socials:
github: "jane-doe"
twitter: "jane_doe"
Run Code Online (Sandbox Code Playgroud)
比方说,为作者页面进行布局_layout/author.html。示例布局可以从文章中获取。
为文件中的作者启用分页和自动分页_config.yml:
pagination:
enabled: true
per_page: 9
permalink: '/page/:num/'
title: ':title - page :num'
sort_field: 'date'
sort_reverse: true
autopages:
enabled: true
# enable auto pages for tags/categories/collections as per need. Disabling for this demo.
tags:
enabled: false
categories:
enabled: false
collections:
enabled: false
authors:
enabled: true # adding false here stops the auto-generation
data: '_data/authors.yml' # Data file with the author details
layouts:
- 'author.html' # We'll define this layout later, will be used for each author
title: 'Posts by :author'
permalink: '/author/:author/'
slugify:
mode: 'default' # choose from [raw, default, pretty, ascii or latin]
cased: true # if true, the uppercase letters in slug will be converted to lowercase ones.
Run Code Online (Sandbox Code Playgroud)
这就是初始设置!
现在将作者值放入帖子的前面:
---
# other configs
author: johndoe
---
Run Code Online (Sandbox Code Playgroud)
permalink这将生成自动页面配置块中定义的页面。如果启用了分页,并且per_page超出了值,则将以格式生成附加页面/page/:num/。
为了呈现作者值,插件公开page.pagination.author_data值
{% assign author = page.pagination.author_data %}
<!-- Use {{ author.name }} or any such value, as defined inside the data file -->
Run Code Online (Sandbox Code Playgroud)
要显示下一个和上一个按钮,您可以使用以下公开的逻辑paginator:
{% if paginator.total_pages > 1 %}
<ul>
{% if paginator.previous_page %}
<li>
<a href="{{ paginator.previous_page_path | prepend: site.baseurl }}">Newer</a>
</li>
{% endif %}
{% if paginator.next_page %}
<li>
<a href="{{ paginator.next_page_path | prepend: site.baseurl }}">Older</a>
</li>
{% endif %}
</ul>
{% endif %}
Run Code Online (Sandbox Code Playgroud)
初始设置是压倒性的,但是一旦完成,您就可以将作者数据放入_data/authors.yml文件内并添加到author: value帖子的 frontmatter 内,然后就相当简单了!
PS 我为Genics 博客开发了这个解决方案,因为管理多个作者很困难。要了解我如何在 Genics 中实现它,请查看主题文件存储库。
我v1.0.1刚刚发布了,这使得将data参数添加到作者自动页面配置中是可选的。
如果未定义数据,您仍然可以使用 访问作者用户名字符串page.pagination.author。您可以使用它在页面上显示用户名。
如果定义了数据,page.pagination.author_data则变量可用。这将是一个哈希图,其中包含数据文件中定义的数据。
这意味着您只需:
您只需插入author: username发布文件即可为它们生成带分页的自动页面!
| 归档时间: |
|
| 查看次数: |
394 次 |
| 最近记录: |