Wiem, że mogę określić zmienną date
w metodzie YAML pliku i uzyskać dostęp do jego wartości za pomocą {{ page.date }}
. Jest to kłopotliwe, ponieważ łatwo zapomina się o zmianie daty aktualizacji pliku. Jak więc uzyskać dostęp do daty modyfikacji pliku?Jak wyświetlić datę modyfikacji pliku w Jekyll?
Odpowiedz
Nie sądzę, że można to zrobić bez użycia frontmater YAML. Należy jednak zauważyć, że podanie wartości date
w przedniej macierzy powoduje przesłonięcie wartości date
podanej w nazwie pliku wpisu.
Więc jeśli masz plik 2013-02-19-my-post.md
, a w jego frontmatter masz date: 2013-02-20
, frontmatter ma pierwszeństwo, a data wpisu to 2013-02-20
.
Jeśli chcesz śledzić, kiedy post został zmodyfikowany, obawiam się, że nie ma możliwości zrobienia tego bez użycia niestandardowego pola w twojej frontmatter. Nazywają to modified-date
lub coś podobnego. Tak, to trochę uciążliwe. Mam fragment kodu TextExpander, który automatycznie wyświetla aktualną datę/czas w odpowiednim formacie, co jest przydatne.
Od Jekyll 1.x jest page.path
, który podaje nazwę aktualnie przetwarzanego postu lub strony. Dodaj następujący filtr (miejsce na przykład w _plugins/myfilters.rb
), aby uzyskać czas modyfikacji danego pliku:
module Jekyll
module MyFilters
def file_date(input)
File.mtime(input)
end
end
end
Liquid::Template.register_filter(Jekyll::MyFilters)
Więc teraz można renderować datę w swoich postach i stron, na przykład, jak
{{ page.path | file_date | date_to_string }}
Niestety, to nie działa, ponieważ 'page.path' jest pusty. Znalazłem [post] (http://stackoverflow.com/questions/13243469/how-can-a-jekyll-page-access-its-filename), które pokazuje, jak uzyskać do niego dostęp, ale to wydaje się działać tylko dla postów i nie dla innych stron. – Robert
Hmm .. to dziwne, używam tego dokładnie na stronach i wygląda na to, że działa dobrze. Jeśli to ma znaczenie, używam jekyll (1.1.2) i ruby (2.0.0p247). –
Bez skryptu, który ustawia 'page.path', otrzymuję komunikat' Liquid error: can not convert nil into String'. Używając go uzyskujemy ''generate': undefined method 'name''. Używam ruby 1.9.3 i Jekylla 0.11.2 i aktualizacja nie jest łatwa ... – Robert
jest to stosunkowo nowy plugin, który robi to, czego szukasz:
https://github.com/gjtorikian/jekyll-last-modified-at
(znaleziono go podczas wyszukiwania w Google Alternatywa ives do innych odpowiedzi w tym wątku)
Przeanalizujmy tę odpowiedź i oznaczajmy ten projekt, dopóki GitHub nie doda tej wtyczki do białej listy. –
Miałem problemy z instalacją najnowszej wersji jekyll. Próbowałem aktualizacji gem, instalacji gem, pakietu exec, instalacji pakietu i próbowałem dołączyć klej w moim config.yml, ale nie mogłem rozwiązać tego problemu "Błąd zależności: Yikes! Wygląda na to, że nie masz ostatniej modyfikacji jekyll -at .... "Korzystam z Githuba, więc jeśli to nie jest na białej liście, to i tak nie jest to dobre ;-) – Athanassios
Jeśli używasz Git, możesz zainstalować hook przed zatwierdzeniem, który automatycznie aktualizuje pole daty w głównej sprawie zmodyfikowanych plików. Byłem bardzo zaskoczony, gdy dowiedziałem się, że hak przed zatwierdzeniem może rzeczywiście zmienić zawartość commit! Trzeba tylko ręcznie zainstalować pre-commit do każdego klonu repozytorium - dodaje brulion działa na mnie za aktualizowanie całkowity czas modyfikacji całej strony:
#!/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
powinien mieć pole "data", jego zawartość zostanie zastąpiona przez każde zatwierdzenie. Następnie można uzyskać do niego dostęp za pośrednictwem {{ site.date }}
. Przykład:
date: 2015-04-10 10:51:37 UTC
Skrypt można uogólnić do aktualizacji tylko tych stron lub wiadomości, które zostały zmienione (zapytanie poprzez git diff-index --cached
) - Nie mam czasu, aby realizować to, ale byłbym zainteresowany, aby dowiedzieć się, czy w końcu wyskakuje schludniejsze rozwiązanie.
Na podstawie postu krlmlr napisałem skrypt przed zatwierdzeniem, aby zaktualizować czas modyfikacji pola date:
w materiale YAML zmodyfikowanych plików.
#!/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
To działa dobrze dla mnie. W rzeczywistości używam pola update:
, aby wskazać zmodyfikowany czas, oraz pola date:
, aby wskazać czas utworzenia.
wfm używając stron gh! Musiał dodać {% chyba, że page.nodate%} {{page.date | date: "% b% -d,% Y"}} {% endunless%} do mojego docpage.html w _layouts i dodaj datę: do pierwszej sprawy każdego pliku. Co za miły prezent świąteczny to znaleźć. – catpaws
Działa jak urok! Zmieniłem tylko format daty. Używam "date" +% Y-% m-% d% T% z "', który pasuje do (aktualnego) domyślnego formatu daty Jekyll. –
- 1. SSIS Przeczytaj datę modyfikacji pliku
- 2. Pobierz datę ostatniej modyfikacji pliku w VB6
- 3. Pobierz datę ostatniej modyfikacji zdalnego pliku
- 4. Jak uzyskać datę utworzenia/ostatniej modyfikacji pliku w Delphi?
- 5. Jak uzyskać datę modyfikacji z pliku w języku C#?
- 6. Jak uzyskać datę modyfikacji pliku w UTC z Python
- 7. Jak uzyskać datę ostatniej modyfikacji z pliku sekwencji Hadoop?
- 8. Jak mogę uzyskać datę ostatniej modyfikacji zespołu?
- 9. w stanie zbudować witrynę Jekyll ... nieprawidłową datę
- 10. Jak wyświetlić dzisiejszą datę w raporcie SSRS?
- 11. Jak uzyskać czas ostatniej modyfikacji pliku w Pythonie?
- 12. Jak używać markdownify w Jekyll, aby wyświetlić fragment indeksu
- 13. Jak uzyskać ostatnią datę dostępu/modyfikacji bazy danych PostgreSQL?
- 14. Jak wyświetlić datę gałązka we francuskich
- 15. Jekyll Nazwa pliku bez daty
- 16. Pobierz datę utworzenia pliku w węźle
- 17. IPhone - pobierz datę ostatniej modyfikacji z serwera WWW
- 18. Jak programowo ustawić czas modyfikacji pliku?
- 19. Jak wyświetlić datę jako ISO8601 z JSTL?
- 20. play-ramy coraz datę ostatniej modyfikacji dla plików
- 21. Zaktualizuj czas modyfikacji pliku (dotknij)
- 22. iOS: Jak znaleźć datę utworzenia pliku?
- 23. Lokalizacja konkretna w jekyll
- 24. Jak uzyskać datę utworzenia pliku?
- 25. Pobierz ostatni czas modyfikacji pliku w Linuksie
- 26. Użyj odpytywania() w celu sprawdzenia modyfikacji pliku
- 27. Podanie pliku/katalogu o tej samej dacie modyfikacji co inny
- 28. Jak uzyskać wczorajszą datę w pliku wsadowym?
- 29. Jak uzyskać datę w pliku BAT
- 30. Polecenie uniksowe (inne niż "stat" i "ls"), aby uzyskać datę modyfikacji pliku bez analizowania
Czy nie jest to możliwe w przypadku postów lub ogólnie? W przypadku postów nie widzę potrzeby uzyskania daty modyfikacji, ponieważ data zakodowana w nazwie pliku jest w porządku (rzadko zmieniam posty). Jednak dla wszystkich innych plików Markdown Jekyll przetwarza, nie mam tej daty i koduję ją w przedniej macierzy YAML. Ponieważ te pliki często się zmieniają, chciałbym automatycznie uzyskać ich datę modyfikacji. – Robert
Opisywana funkcja nie jest wbudowana w Jekyll dla postów ani stron. Przypuszczam, że teoretycznie można napisać [wtyczkę Jekyll] (https://github.com/mojombo/jekyll/wiki/Plugins), która wykorzystuje 'File.mtime' Rubiego, ale wydaje się, że jest to więcej kłopotu niż jest warte. Ponadto mogą pojawić się niezamierzone konsekwencje. Co jeśli na przykład chcesz edytować frontmatter strony bez aktualizowania daty modyfikacji? Myślę, że zmienna niestandardowa to najlepsza metoda. –