没有日期的Jekyll文件名

时间:2014-11-24 06:59:52

标签: jekyll github-pages

我想使用Jekyll和GitHub Pages构建文档站点。问题是Jekyll只接受_posts下的文件名,其格式与YYYY-MM-DD-your-title-is-here.md完全相同。

如何在没有此文件名模式的情况下在Jekyll中发布页面?类似的东西:

  • awesome-title.md
  • yet-another-title.md
  • etc.md

感谢您的进步。

4 个答案:

答案 0 :(得分:23)

不要使用帖子;帖子是有约会的东西。听起来你可能想要使用集合;你获得了帖子的所有力量;但没有讨厌的日期/命名要求。

https://jekyllrb.com/docs/collections/

我几乎所有不是帖子的东西都使用集合。这就是我自己的网站配置为使用“'页面”的集合的方式。以及我网站的更具体部分:

My config.yaml

My Pages collection

答案 1 :(得分:20)

我猜您对帖子网址http://domaine.tld/category/2014/11/22/post.html感到恼火。

您无法绕过帖子的文件名模式,但可以使用permalinksee documentation)。

<强> _posts / 2014-11-22-other-post.md

---
title:  "Other post"
date:   2014-11-22 09:49:00
permalink: anything-you-want
---

文件将为anything-you-want/index.html

网址将为http://domaine.tld/anything-you-want

答案 2 :(得分:3)

我在不“放弃”帖子的情况下所做的工作(看起来像使用集合或页面是一种更好,更深入的解决方案)是@igneousaur在评论中说的加上使用与文件名前缀相同的日期的组合:

  1. permalink: /:title.html中使用_config.yml(发布的URL中没有日期)。
  2. 0001-01-01-name.md文件夹中的所有文件使用_posts格式(jekyll对文件名感到满意,对文件排序感到满意)。

当然,我们可以在名称上包括任何“额外信息”,也许可以包含一些增量ID或有助于组织文件的任何内容,例如:0001-01-01-001-name.md

答案 3 :(得分:-2)

我解决它的方法是添加_plugins/no_date.rb

class Jekyll::PostReader
  # Don't use DATE_FILENAME_MATCHER so we don't need to put those stupid dates
  # in the filename. Also limit to just *.markdown, so it won't process binary
  # files from e.g. drags.
  def read_posts(dir)
    read_publishable(dir, "_posts", /.*\.markdown$/)
  end
  def read_drafts(dir)
    read_publishable(dir, "_drafts", /.*\.markdown$/)
  end
end

这会覆盖(“猴子补丁”)标准的 Jekyll 函数;这些的默认值是:

# Read all the files in <source>/<dir>/_drafts and create a new
# Document object with each one.
#
# dir - The String relative path of the directory to read.
#
# Returns nothing.
def read_drafts(dir)
  read_publishable(dir, "_drafts", Document::DATELESS_FILENAME_MATCHER)
end

# Read all the files in <source>/<dir>/_posts and create a new Document
# object with each one.
#
# dir - The String relative path of the directory to read.
#
# Returns nothing.
def read_posts(dir)
  read_publishable(dir, "_posts", Document::DATE_FILENAME_MATCHER)
end

引用的常量是:

DATELESS_FILENAME_MATCHER = %r!^(?:.+/)*(.*)(\.[^.]+)$!.freeze
DATE_FILENAME_MATCHER = %r!^(?>.+/)*?(\d{2,4}-\d{1,2}-\d{1,2})-([^/]*)(\.[^.]+)$!.freeze

如您所见,DATE_FILENAME_MATCHER 中使用的 read_posts() 需要一个日期 ((\d{2,4}-\d{1,2}-\d{1,2}));我把 date: 2021-07-06 放在最前面。

我无法真正让集合工作,这也解决了我遇到的另一个问题,即在 _drafts 中存储二进制文件(例如图像)会在尝试处理它们时出错。

可以说有点难看,但效果很好。缺点是它可能会在更新时中断,尽管我多年来一直在修补各种东西,但迄今为止从未真正遇到过任何问题。这是 Jekyll 4.2.0。