30

dateファイルのYAMLフロントマターで変数を指定し、。を使用してその値にアクセスできることを知っています{{ page.date }}。ファイルが更新されたときに日付を変更するのを簡単に忘れてしまうため、これは面倒です。では、どうすればファイルの変更日にアクセスできますか?

4

5 に答える 5

17

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 }}
于 2013-08-14T13:39:45.550 に答える
4

YAMLフロントマターを使用せずにこれを行うことは不可能だと思います。ただし、datefrontmatterで指定すると、実際dateには投稿のファイル名で指定されたものが上書きされることに注意してください。

したがって、ファイルが2013-02-19-my-post.mdあり、そのフロントマターにが含まれているdate: 2013-02-20場合、フロントマターが優先され、投稿の日付は。になり2013-02-20ます。

投稿がいつ変更されたかを追跡したい場合は、フロントマターでカスタムフィールドを使用せずにこれを行う方法はありません。modified-dateそれか何かと呼んでください。はい、それは少し退屈です。現在の日付/時刻を適切な形式で自動的に出力するTextExpanderスニペットがあります。これは便利です。

于 2013-02-20T20:05:42.627 に答える
4

Git を使用している場合は、変更されたファイルの先頭にある日付フィールドを自動的に更新する pre-commit フックをインストールできます。pre-commit フックが実際にコミットの内容を変更できることを知って、私は非常に驚きました! リポジトリの各クローンに pre-commit フックを手動でインストールするだけで済みます。次のラフ ドラフトは、Web サイト全体の全体的な変更時間を更新するのに役立ちます。

#!/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

スクリプトは、変更されたページまたは投稿のみを更新するように一般化できます (クエリ経由でgit diff-index --cached)。これを実装する時間はありませんが、より適切な解決策が最終的に出てくるかどうかを知りたいです。

于 2015-04-10T11:09:48.067 に答える