2013-02-20 49 views
23

मुझे पता है कि मैं एक फ़ाइल के वाईएएमएल फ्रंटमेटर में एक चर date निर्दिष्ट कर सकता हूं और {{ page.date }} के साथ अपने मान का उपयोग कर सकता हूं। यह बोझिल है क्योंकि जब कोई फ़ाइल अपडेट हो जाती है तो उस तारीख को बदलने में आसानी से भूल जाता है। तो मैं फ़ाइल की संशोधन तिथि कैसे प्राप्त कर सकता हूं?जेकील में किसी फ़ाइल की संशोधन तिथि कैसे दिखाएं?

उत्तर

4

मुझे नहीं लगता कि वाईएएमएल फ्रंटमेटर का उपयोग किए बिना ऐसा करना संभव है। नोट, हालांकि, फ्रंटमेटर में date निर्दिष्ट करना वास्तव में पोस्ट के फ़ाइल नाम में दिए गए date को ओवरराइड करता है।

इसलिए यदि आपके पास 2013-02-19-my-post.md फ़ाइल है और इसके फ्रंटमेटर में आपके पास date: 2013-02-20 है, तो फ्रंटमेटर को प्राथमिकता मिलती है, और पोस्ट की तारीख 2013-02-20 है।

यदि आप कोई पोस्ट संशोधित होने पर ट्रैक रखना चाहते हैं, तो मुझे डर है कि आपके फ्रंटमेटर में कस्टम फ़ील्ड का उपयोग किए बिना ऐसा करने का कोई तरीका नहीं है। इसे modified-date या कुछ कहें। हाँ, यह थोड़ा कठिन है। मेरे पास एक टेक्स्ट एक्सपेंडर स्निपेट है जो स्वचालित रूप से उचित प्रारूप में वर्तमान दिनांक/समय आउटपुट करता है, जो आसान है।

+0

क्या पोस्ट या सामान्य रूप से यह संभव नहीं है? पदों के लिए मुझे अपनी संशोधन तिथि प्राप्त करने की आवश्यकता नहीं दिखाई देती है, क्योंकि फ़ाइल नाम में एन्कोड की गई तारीख ठीक है (मैं शायद ही कभी पोस्ट बदलता हूं)। हालांकि, अन्य सभी मार्कडाउन फ़ाइलों के लिए जेकील प्रसंस्करण कर रहा है, मेरे पास उस तारीख नहीं है और इसे वाईएएमएल फ्रंटमेटर में एन्कोड किया गया है। चूंकि ये फ़ाइलें अक्सर बदलती हैं, इसलिए मैं उनकी संशोधन तिथि स्वचालित रूप से प्राप्त करना चाहूंगा। – Robert

+1

आपके द्वारा वर्णित सुविधा या तो पोस्ट या पृष्ठों के लिए जेकील में नहीं बनाई गई है। मुझे लगता है कि सिद्धांत में आप एक [जेकिल प्लगइन] (https://github.com/mojombo/jekyll/wiki/Plugins) लिख सकते हैं जो रूबी के 'File.mtime' का उपयोग करता है, लेकिन यह इसके लायक से अधिक परेशानी की तरह लगता है। इसके अलावा, कुछ अनपेक्षित परिणाम हो सकते हैं। क्या होगा, उदाहरण के लिए, आप अपनी संशोधन तिथि अपडेट किए बिना किसी पृष्ठ के फ्रंटमेटर को संपादित करना चाहते हैं? मुझे लगता है कि एक कस्टम वैरिएबल जाने का सबसे अच्छा तरीका है। –

14

जेकिल 1.x से page.path है जो आपको वर्तमान में संसाधित किए गए पोस्ट या पेज का फ़ाइल नाम देता है।

{{ page.path | file_date | date_to_string }} 
+0

दुर्भाग्य से, यह मेरे लिए काम नहीं करता है क्योंकि 'पेज.path' खाली है। मैंने पाया [एक पोस्ट] (http://stackoverflow.com/questions/13243469/how-can-a-jekyll-page-access-its-filename) जो दिखाता है कि इसे कैसे एक्सेस किया जाए लेकिन ऐसा लगता है कि यह केवल पोस्ट के लिए काम करता है और अन्य पृष्ठों के लिए नहीं। – Robert

+0

हम्म .. यह अजीब बात है, मैं इसे पृष्ठों पर सटीक रूप से उपयोग कर रहा हूं, और ऐसा लगता है कि यह ठीक काम कर रहा है। यदि यह मायने रखता है, तो मैं जैकील (1.1.2) और रूबी (2.0.0p247) का उपयोग कर रहा हूं। –

+0

'पेज.path' सेट करने वाली स्क्रिप्ट के बिना मुझे' तरल त्रुटि मिलती है: शून्य को स्ट्रिंग में परिवर्तित नहीं किया जा सकता है '। इसका उपयोग करके मुझे 'जेनरेट' मिलता है: अपरिभाषित विधि 'name''। मैं रूबी 1.9.3 और जैकिल 0.11.2 का उपयोग कर रहा हूं और अपडेट करना इतना आसान नहीं है ... – Robert

22

के रूप में,

module Jekyll 
    module MyFilters 
    def file_date(input) 
     File.mtime(input) 
    end 
    end 
end 

Liquid::Template.register_filter(Jekyll::MyFilters) 

तो अब आप अपनी पोस्ट और पृष्ठों, जैसे पर तारीख प्रदान कर सकते हैं: किसी दिए गए फ़ाइल नाम के संशोधन समय प्राप्त करने के लिए निम्न फ़िल्टर (जगह _plugins/myfilters.rb में जैसे) जोड़ें

https://github.com/gjtorikian/jekyll-last-modified-at

(यह पाया जबकि alternat के लिए Google खोज: यह एक अपेक्षाकृत नया प्लगइन है कि आप जो खोज रहे हैं इस धागे में अन्य उत्तरों के लिए ives)

+6

चलो इस जवाब को ऊपर उठाएं और उस परियोजना को तब तक तारांकित करें जब तक कि गिटहब ने श्वेतसूची में प्लगइन को जोड़ा न हो। –

+1

मुझे jekyll-last-modified-at स्थापित करने में समस्याएं थीं। मैंने मणि अपडेट, मणि इंस्टॉल, बंडल निष्पादन, बंडल इंस्टॉल करने की कोशिश की और मेरी config.yml में मणि को शामिल करने का प्रयास किया लेकिन मैं इसे "निर्भरता त्रुटि: ठीक नहीं कर सका! ऐसा लगता है कि आपके पास jekyll-last-modified नहीं है -ट .... "मैं गिथब का उपयोग करता हूं, इसलिए यदि यह श्वेतसूची नहीं है तो यह मेरे लिए अच्छा नहीं है ;-) – Athanassios

4

यदि आप गिट का उपयोग कर रहे हैं, तो आप एक पूर्व-प्रतिबद्ध हुक स्थापित कर सकते हैं जो संशोधित फ़ाइलों के सामने के मामले में दिनांक फ़ील्ड को स्वचालित रूप से अद्यतन करता है। मैं यह जानकर बहुत हैरान था कि प्री-प्रतिबद्ध हुक वास्तव में प्रतिबद्धता की सामग्री को बदल सकता है! - आप केवल मैन्युअल रूप से भंडार में से प्रत्येक के क्लोन में एक पूर्व प्रतिबद्ध हुक स्थापित किया है निम्नलिखित किसी न किसी मसौदा पूरी वेबसाइट के समग्र संशोधन समय अद्यतन करने के लिए मेरे लिए काम करता है:

#!/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 के माध्यम से क्वेरी) को बदल दिया है कि अद्यतन करने के लिए - मैं समय इस लागू करने के लिए नहीं है, लेकिन मैं अगर जानने के लिए दिलचस्पी होगी एक neater समाधान अंततः बाहर pops।

6

krlmlr की पोस्ट के आधार पर, मैंने संशोधित फ़ाइलों के वाईएएमएल फ्रंट मामले में date: फ़ील्ड के संशोधन समय को अद्यतन करने के लिए एक पूर्व-स्क्रिप्ट स्क्रिप्ट लिखी।

#!/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: फ़ील्ड का उपयोग करता हूं।

+0

gh-पृष्ठों का उपयोग करके wfm! {% जब तक page.nodate%} {{page.date | जोड़ना था दिनांक: "% b% -d,% y"}} _% अंतहीन%} _layouts में मेरे docpage.html पर और दिनांक जोड़ें: प्रत्येक फ़ाइल के सामने के मामले में। यह कितना अच्छा क्रिसमस मौजूद था यह खोजना था। – catpaws

+1

एक आकर्षण की तरह काम करता है! केवल एक चीज जो मैंने बदल दी थी वह दिनांक प्रारूप था। मैं 'तारीख" +% वाई-% एम-% डी% टी% जेड "का उपयोग कर रहा हूं जो 'वर्तमान (डिफ़ॉल्ट) डिफ़ॉल्ट जेकिल दिनांक प्रारूप से मेल खाता है। –