我想使用Jekyll和GitHub Pages构建文档站点。问题是Jekyll只接受_posts
下的文件名,其格式与YYYY-MM-DD-your-title-is-here.md
完全相同。
如何在没有此文件名模式的情况下在Jekyll中发布页面?类似的东西:
awesome-title.md
yet-another-title.md
etc.md
感谢您的进步。
答案 0 :(得分:23)
不要使用帖子;帖子是有约会的东西。听起来你可能想要使用集合;你获得了帖子的所有力量;但没有讨厌的日期/命名要求。
https://jekyllrb.com/docs/collections/
我几乎所有不是帖子的东西都使用集合。这就是我自己的网站配置为使用“'页面”的集合的方式。以及我网站的更具体部分:
答案 1 :(得分:20)
我猜您对帖子网址http://domaine.tld/category/2014/11/22/post.html
感到恼火。
您无法绕过帖子的文件名模式,但可以使用permalink
(see 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在评论中说的加上使用与文件名前缀相同的日期的组合:>
permalink: /:title.html
中使用_config.yml
(发布的URL中没有日期)。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。