Я знаю, что я могу указать переменную date
в фронте файла YAML файла и получить доступ к его значению с помощью {{ page.date }}
. Это громоздко, поскольку легко забыть изменить дату обновления файла. Итак, как я могу получить доступ к дате изменения файла?
Как показать дату изменения файла в Jekyll?
Ответ 1
Это относительно новый плагин, который делает то, что вы ищете:
https://github.com/gjtorikian/jekyll-last-modified-at
(нашел его при поиске в Google альтернатив другим ответам в этом потоке)
Ответ 2
Из Jekyll 1.x существует page.path
, который дает вам имя файла сообщения или страницы, которые в настоящее время обрабатываются. Добавьте следующий фильтр (место, например, в _plugins/myfilters.rb
), чтобы получить время модификации данного имени файла:
module Jekyll
module MyFilters
def file_date(input)
File.mtime(input)
end
end
end
Liquid::Template.register_filter(Jekyll::MyFilters)
Итак, теперь вы можете отображать дату на своих страницах и страницах, например,
{{ page.path | file_date | date_to_string }}
Ответ 3
На основании сообщения krlmlr я написал pre-commit script для обновления времени модификации поля date:
в элементе управления YAML измененных файлов.
#!/bin/sh
# Contents of .git/hooks/pre-commit
git diff --cached --name-status | grep "^M" | while read a b; do
cat $b | sed "/---.*/,/---.*/s/^date:.*$/date: $(date -u "+%Y-%m-%d %T %Z")/" > tmp
mv tmp $b
git add $b
done
Он отлично работает для меня. Фактически я использую поле update:
для указания времени изменения и date:
, чтобы указать время создания.
Ответ 4
Я не думаю, что это можно сделать без использования линейки YAML. Обратите внимание, однако, что указание date
в фронте на самом деле переопределяет date
, указанное в имени файла сообщения.
Итак, если у вас есть файл 2013-02-19-my-post.md
, а в его frontmatter у вас есть date: 2013-02-20
, фронтмасс имеет приоритет, а дата публикации 2013-02-20
.
Если вы хотите отслеживать, когда сообщение было изменено, я боюсь, что нет никакого способа сделать это, не используя настраиваемое поле в вашем фронте. Назовите его modified-date
или что-то еще. Да, это немного утомительно. У меня есть фрагмент TextExpander, который автоматически выводит текущую дату/время в нужном формате, что удобно.
Ответ 5
Если вы используете Git, вы можете установить крюк pre-commit, который автоматически обновляет поле даты в переднем деле измененных файлов. Я был очень удивлен, узнав, что крюк pre-commit действительно может изменить содержимое фиксации! Вам нужно только вручную установить привязку pre-commit к каждому клону репозитория - для меня будет обновлен общий черновик всего проекта:
#!/bin/sh
# Contents of .git/hooks/pre-commit
set -e
set -x
sed -i "s/^date:.*$/date: $(TZ=UTC date "+%Y-%m-%d %H:%M:%S %Z")/" _config.yml
git add _config.yml
Ожидается, что в _config.yml
будет поле "дата", его содержимое будет заменено каждым фиксацией. Доступ к нему можно получить через {{ site.date }}
. Пример:
date: 2015-04-10 10:51:37 UTC
script можно обобщить, чтобы обновлять только те страницы или сообщения, которые изменились (запрос через git diff-index --cached
). У меня нет времени для его реализации, но мне было бы интересно узнать, решение со временем выскочит.