如何使用 jekyll 自定义页面上项目的排序

How to customize the sorting of items on a page with jekyll

我不太确定如何表达我的请求,但基本上,我有一个包含多个类别的集合,该集合的所有文章都显示在一个页面上。它已经按类别排序,但是,我正在尝试找到一种方法以特定方式对这些类别进行排序。我试过分配类别权重并使用它进行排序,但它没有用。我不确定还可以尝试什么?

您可以找到我在 GitHub...https://github.com/yndrelbosch/yndrelbosch.github.io

上所做的所有操作的代码

我正在尝试制作此页面:https://yndrelbosch.github.io/tutorials/对页面上的类别使用自定义排序...

该页面的代码在这里:/pages/tutorials.html

合集中的文章在这里:/_tutorials/

谁能帮帮我?

pages/tutorials.html中,你的{% assign categories = site.tutorials | group_by:"category" | sort: "category-weight" %}肯定不行。

由于 category-weight 不是 site.tutorials 文档中的键,排序过滤器将自动失败。

节省一些打字时间

我们可以通过根据文档路径定义默认变量来避免在教程前面设置类别。

让我们改变 _tutorials 组织:

_tutorials
├── advanced
│   ├── adding-next-previous-to-blog.md
│   └── ...
├── getting-started
│   ├── getting-started-with-jekyll.md
│   └── ...
└── setup
    ├── jekyll-on-windows-2.md
    └── ...

_config.yml中添加一些默认值:

defaults:
  - ...
  - { scope: { path: "_tutorials/advanced" }, values:  { category: "Advanced" } }
  - { scope: { path: "_tutorials/getting-started" }, values:  { category: "Getting started" } }
  - { scope: { path: "_tutorials/setup" }, values:  { category: "Setup" } }

为教程类别订单创建参考

_config.yml中添加

# this is used to display tutorials in the right categories order
# be sure to match default category names defined in site.defaults
tutorials-categories:
  - "Setup"
  - "Getting started"
  - "Advanced"

请注意,将类别顺序从 pages/tutorials.html 移动到 _config.yml 是为了集中配置。它有助于在默认设置和类别顺序之间保持同步。

让我们以正确的类别顺序显示教程

pages/tutorials 中,我们可以这样做:

{% assign categories = site.tutorials | group_by:"category" %}

{% comment %} ++++++++++++++++++++++++++
We loop site.tutorials-categories to sort categories in a defined order
++++++++++++++++++++++++++ {% endcomment %}
{% for category in site.tutorials-categories %}

  {% assign current-category = categories | where:"name", category | first %}
  {% assign category-tutorials = current-category.items %}

  <h2>{{ category }}</h2>
  <ul>
  {% for item in category-tutorials %}
    <li><a href="{{ site.baseurl }}{{ item.url }}">{{ item.title }}</a></li>
  {% endfor %}
  </ul>
{% endfor %}