如何按作者分页

Tob*_*olb 6 jekyll jekyll-extensions yaml-front-matter

我想做什么

我们知道Jekyll可以使用像前面这样的前面的物质变量tags,categories然后用它们来访问它们site.tagssite.categories使用液体迭代它们.现在我的问题是我无法使用像author(因为site.authors)这样的自定义前端变量这样做,因为Jekyll不会以列表格式存储它.这使得分页非常困难.

问题

我看过的每个解决方案即

需要我硬编码的作者列表_config.yml或其他一些.yml(即_data/authors.yml).这里的问题是我没有使用固定的作者列表.作者列表需要更新,当我在服务器运行时输入带有前端标签author: exampleAuthor或作者列表的另一篇文章(如每个帖子的多个作者,当前只能使用categoriestags也可以).它可以很好地处理标签和类别,但不能像作者那样使用自定义标签.

最简单的解决方案是使用一个site.authors列表进行迭代,然后使用ruby插件扩展它.

我没有找到一个为我提供解决方案的插件,并认为这是一个常见的问题,我可能不是第一个拥有的.

我尝试了什么

然后,我在写我自己的红宝石插件(这是很难在它自己的,因为缺少文档.也许我是哑巴谷歌,但资源,我发现那里非常有限,根本不足以引导您完成整个过程)但必须有一个原因,为什么这么难做,使得所有现有的解决方案都需要对作者列表进行硬编码.yml(或者.json,大多数人.yml因某种原因而去).

这样做是出于对我的问题,因为我只想在与它的作者姓名职位扔后来和操纵.yml(我的印象中yml,一旦启动了服务器,如文件不会被编译_config.yml,正确我,如果我错了)会适得其反,因为它需要你重新启动服务器来编译它们.

甚至非常高级的插件,如jekyll-paginate-v2(我成功地用标签和类别对帖子进行分页)也没有解决方案,因为这个问题描述了.他被建议滥用类别变量按作者分页,这是一种绝望的解决方法.

我已经找到了可以用集合完成的建议,但这似乎不可行.主要是由于它们的实现性质: 它们需要对作者列表进行硬编码(同样,我不希望这样.我没有固定的作者列表.所有作者信息都必须来自前面 -在/_posts目录.md文件中的问题)到目前为止,我看不到如何使用集合.但是我愿意接受建议.

编辑:在Jekylls github页面上发现了这个过时的问题,其中强调人们正在尝试做同样但无济于事.这在过去4年中是否可行?

Gou*_*rav 2

对于仍在寻找方法的人

  • 只需放置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发布文件即可为它们生成带分页的自动页面!