如何按作者分页
How to paginate posts by author
我想做什么
Jekyll 可以使用 tags
和 categories
之类的前端变量,并使用 site.tags
和 site.categories
访问它们以使用 liquid 迭代它们。
现在我的问题是我不能使用像 author
(如 site.authors
)这样的自定义前端变量来做到这一点,因为 Jekyll 不会以列表格式存储它。这使得它很难分页。
问题
我看过的每个解决方案,即
要求我将作者列表硬编码为_config.yml
或其他.yml
(即在_data/authors.yml
中)。
这里的问题是我没有使用固定的作者列表。当我放入另一个带有前题标签 author: exampleAuthor
或作者列表的 post 时,作者列表需要更新(就像每个 post 的多个作者一样,目前只能使用categories
和 tags
),而服务器是 运行。它非常适合标签和类别,但不适用于作者等自定义标签。
最简单的解决方案是有一个 site.authors
列表来迭代并使用 ruby 插件扩展它。
我还没有找到可以为我提供解决方案的插件,我认为这是一个常见问题,我可能不是第一个遇到这个问题的人。
我试过的
然后我考虑编写自己的 ruby 插件(由于缺乏文档,这本身就很难。也许我对 google 太笨了,但是我找到的资源其中非常有限且几乎不足以指导您完成整个过程)但必须有一个原因使得所有现有解决方案都需要在 .yml
中硬编码作者列表(或 .json
,但大多数人出于某种原因选择 .yml
。
这样做对我来说是不可能的,因为我只想稍后在 post 中放入作者姓名并操纵 .yml
(我的印象是.yml
-服务器启动后文件不会被编译,例如 _config.yml
,如果我错了请纠正我)会适得其反,因为它需要您重新启动服务器才能编译它们。
甚至像 jekyll-paginate-v2 (which I use successfully to paginate posts by tags and categories) don't have a solution to this, as shown by this issue 这样非常高级的插件。根据这个问题,建议滥用类别变量按作者分页。在我看来,这是一种绝望的解决方法,而且太老套了,无法考虑。
我发现建议也可以用集合来完成,但这又会
需要对作者列表进行硬编码(同样,我不想那样。我没有固定的作者列表。所有作者信息都必须来自前面- /_posts
目录中的 .md
个文件)
截至目前,我还不知道如何使用集合来完成。
但是我愿意接受建议。
编辑: 我发现这篇文章过时了 issue on Jekylls github page,它强调人们正在尝试做同样的事情但无济于事。
这在过去 4 年中变得可行了吗?
使用 collections 可以轻松地将作者添加到 Jekyll 帖子中。 Here's a proof of concept for you. Specifically, in 我添加你需要的一切。
As for your question about pagination,需要使用分页插件(paginate-v2 很好),因为我相信内置分页只支持帖子集合。
对于仍在寻找方法的人来说
- 只需将
author: name
拖放到 post 前面即可自动生成作者页面,
- 在作者页面上分页(一个很好的优化)。
我构建了一个插件 jekyll-auto-authors
that works in sync with jekyll-paginate-v2
来启用作者自动页面和分页。
我写了 this guide and made this video 来帮助设置。
最低限度的设置说明:
安装插件:
group :jekyll_plugins do
# other gems
gem "jekyll-paginate-v2" # reqiured for jekyll-auto-authors to work
gem "jekyll-auto-authors"
end
启用它:
plugins:
# other plugins
- jekyll-paginate-v2
- jekyll-auto-authors
使用作者数据制作数据文件,例如使用 _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"
为作者页面做一个布局,比方说_layout/author.html
。示例布局可以取自 the article.
为 _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.
这是初始设置!
现在在 posts 的 front matter 中添加作者值:
---
# other configs
author: johndoe
---
这将生成在自动页面配置的 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 -->
要显示下一个和上一个按钮,您可以使用 paginator
公开的 this logic:
{% 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 %}
初始设置非常繁琐,但一旦完成,您只需将作者数据放入 _data/authors.yml
文件并在 post frontmatter 中添加 author: value
就相当简单了!
P.S。我为 Genics Blog as managing multiple authors got hard. To learn how I've implemented it at Genics, please check out the theme-files 存储库开发了这个解决方案。
更新
我刚刚发布了v1.0.1
,这使得在作者自动页面配置中添加data
参数成为可选。
如果未定义数据,您仍然可以使用 page.pagination.author
访问作者用户名字符串。您可以使用它在页面上显示用户名。
如果定义了数据,page.pagination.author_data
变量可用。这将是一个具有数据文件中定义的数据的哈希图。
这意味着您只需:
- 添加并启用插件。
- 设置分页和作者页面配置。
- 制作布局文件。
您只需将 author: username
放入 post 文件即可为它们生成带分页的自动页!
我是一名高中生,我花了好几天时间来构建这个项目。请给 the project 打个星标并关注以表示支持:)
我想做什么
Jekyll 可以使用 tags
和 categories
之类的前端变量,并使用 site.tags
和 site.categories
访问它们以使用 liquid 迭代它们。
现在我的问题是我不能使用像 author
(如 site.authors
)这样的自定义前端变量来做到这一点,因为 Jekyll 不会以列表格式存储它。这使得它很难分页。
问题
我看过的每个解决方案,即
要求我将作者列表硬编码为_config.yml
或其他.yml
(即在_data/authors.yml
中)。
这里的问题是我没有使用固定的作者列表。当我放入另一个带有前题标签 author: exampleAuthor
或作者列表的 post 时,作者列表需要更新(就像每个 post 的多个作者一样,目前只能使用categories
和 tags
),而服务器是 运行。它非常适合标签和类别,但不适用于作者等自定义标签。
最简单的解决方案是有一个 site.authors
列表来迭代并使用 ruby 插件扩展它。
我还没有找到可以为我提供解决方案的插件,我认为这是一个常见问题,我可能不是第一个遇到这个问题的人。
我试过的
然后我考虑编写自己的 ruby 插件(由于缺乏文档,这本身就很难。也许我对 google 太笨了,但是我找到的资源其中非常有限且几乎不足以指导您完成整个过程)但必须有一个原因使得所有现有解决方案都需要在 .yml
中硬编码作者列表(或 .json
,但大多数人出于某种原因选择 .yml
。
这样做对我来说是不可能的,因为我只想稍后在 post 中放入作者姓名并操纵 .yml
(我的印象是.yml
-服务器启动后文件不会被编译,例如 _config.yml
,如果我错了请纠正我)会适得其反,因为它需要您重新启动服务器才能编译它们。
甚至像 jekyll-paginate-v2 (which I use successfully to paginate posts by tags and categories) don't have a solution to this, as shown by this issue 这样非常高级的插件。根据这个问题,建议滥用类别变量按作者分页。在我看来,这是一种绝望的解决方法,而且太老套了,无法考虑。
我发现建议也可以用集合来完成,但这又会
需要对作者列表进行硬编码(同样,我不想那样。我没有固定的作者列表。所有作者信息都必须来自前面- /_posts
目录中的 .md
个文件)
截至目前,我还不知道如何使用集合来完成。
但是我愿意接受建议。
编辑: 我发现这篇文章过时了 issue on Jekylls github page,它强调人们正在尝试做同样的事情但无济于事。 这在过去 4 年中变得可行了吗?
使用 collections 可以轻松地将作者添加到 Jekyll 帖子中。 Here's a proof of concept for you. Specifically, in
As for your question about pagination,需要使用分页插件(paginate-v2 很好),因为我相信内置分页只支持帖子集合。
对于仍在寻找方法的人来说
- 只需将
author: name
拖放到 post 前面即可自动生成作者页面, - 在作者页面上分页(一个很好的优化)。
我构建了一个插件 jekyll-auto-authors
that works in sync with jekyll-paginate-v2
来启用作者自动页面和分页。
我写了 this guide and made this video 来帮助设置。
最低限度的设置说明:
安装插件:
group :jekyll_plugins do
# other gems
gem "jekyll-paginate-v2" # reqiured for jekyll-auto-authors to work
gem "jekyll-auto-authors"
end
启用它:
plugins:
# other plugins
- jekyll-paginate-v2
- jekyll-auto-authors
使用作者数据制作数据文件,例如使用 _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"
为作者页面做一个布局,比方说_layout/author.html
。示例布局可以取自 the article.
为 _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.
这是初始设置!
现在在 posts 的 front matter 中添加作者值:
---
# other configs
author: johndoe
---
这将生成在自动页面配置的 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 -->
要显示下一个和上一个按钮,您可以使用 paginator
公开的 this logic:
{% 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 %}
初始设置非常繁琐,但一旦完成,您只需将作者数据放入 _data/authors.yml
文件并在 post frontmatter 中添加 author: value
就相当简单了!
P.S。我为 Genics Blog as managing multiple authors got hard. To learn how I've implemented it at Genics, please check out the theme-files 存储库开发了这个解决方案。
更新
我刚刚发布了v1.0.1
,这使得在作者自动页面配置中添加data
参数成为可选。
如果未定义数据,您仍然可以使用 page.pagination.author
访问作者用户名字符串。您可以使用它在页面上显示用户名。
如果定义了数据,page.pagination.author_data
变量可用。这将是一个具有数据文件中定义的数据的哈希图。
这意味着您只需:
- 添加并启用插件。
- 设置分页和作者页面配置。
- 制作布局文件。
您只需将 author: username
放入 post 文件即可为它们生成带分页的自动页!
我是一名高中生,我花了好几天时间来构建这个项目。请给 the project 打个星标并关注以表示支持:)