मुझे पता है कि मैं एक फ़ाइल के वाईएएमएल फ्रंटमेटर में एक चर date
निर्दिष्ट कर सकता हूं और {{ page.date }}
के साथ अपने मान का उपयोग कर सकता हूं। यह बोझिल है क्योंकि जब कोई फ़ाइल अपडेट हो जाती है तो उस तारीख को बदलने में आसानी से भूल जाता है। तो मैं फ़ाइल की संशोधन तिथि कैसे प्राप्त कर सकता हूं?जेकील में किसी फ़ाइल की संशोधन तिथि कैसे दिखाएं?
उत्तर
मुझे नहीं लगता कि वाईएएमएल फ्रंटमेटर का उपयोग किए बिना ऐसा करना संभव है। नोट, हालांकि, फ्रंटमेटर में date
निर्दिष्ट करना वास्तव में पोस्ट के फ़ाइल नाम में दिए गए date
को ओवरराइड करता है।
इसलिए यदि आपके पास 2013-02-19-my-post.md
फ़ाइल है और इसके फ्रंटमेटर में आपके पास date: 2013-02-20
है, तो फ्रंटमेटर को प्राथमिकता मिलती है, और पोस्ट की तारीख 2013-02-20
है।
यदि आप कोई पोस्ट संशोधित होने पर ट्रैक रखना चाहते हैं, तो मुझे डर है कि आपके फ्रंटमेटर में कस्टम फ़ील्ड का उपयोग किए बिना ऐसा करने का कोई तरीका नहीं है। इसे modified-date
या कुछ कहें। हाँ, यह थोड़ा कठिन है। मेरे पास एक टेक्स्ट एक्सपेंडर स्निपेट है जो स्वचालित रूप से उचित प्रारूप में वर्तमान दिनांक/समय आउटपुट करता है, जो आसान है।
जेकिल 1.x से page.path
है जो आपको वर्तमान में संसाधित किए गए पोस्ट या पेज का फ़ाइल नाम देता है।
{{ page.path | file_date | date_to_string }}
दुर्भाग्य से, यह मेरे लिए काम नहीं करता है क्योंकि 'पेज.path' खाली है। मैंने पाया [एक पोस्ट] (http://stackoverflow.com/questions/13243469/how-can-a-jekyll-page-access-its-filename) जो दिखाता है कि इसे कैसे एक्सेस किया जाए लेकिन ऐसा लगता है कि यह केवल पोस्ट के लिए काम करता है और अन्य पृष्ठों के लिए नहीं। – Robert
हम्म .. यह अजीब बात है, मैं इसे पृष्ठों पर सटीक रूप से उपयोग कर रहा हूं, और ऐसा लगता है कि यह ठीक काम कर रहा है। यदि यह मायने रखता है, तो मैं जैकील (1.1.2) और रूबी (2.0.0p247) का उपयोग कर रहा हूं। –
'पेज.path' सेट करने वाली स्क्रिप्ट के बिना मुझे' तरल त्रुटि मिलती है: शून्य को स्ट्रिंग में परिवर्तित नहीं किया जा सकता है '। इसका उपयोग करके मुझे 'जेनरेट' मिलता है: अपरिभाषित विधि 'name''। मैं रूबी 1.9.3 और जैकिल 0.11.2 का उपयोग कर रहा हूं और अपडेट करना इतना आसान नहीं है ... – Robert
के रूप में,
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)
चलो इस जवाब को ऊपर उठाएं और उस परियोजना को तब तक तारांकित करें जब तक कि गिटहब ने श्वेतसूची में प्लगइन को जोड़ा न हो। –
मुझे jekyll-last-modified-at स्थापित करने में समस्याएं थीं। मैंने मणि अपडेट, मणि इंस्टॉल, बंडल निष्पादन, बंडल इंस्टॉल करने की कोशिश की और मेरी config.yml में मणि को शामिल करने का प्रयास किया लेकिन मैं इसे "निर्भरता त्रुटि: ठीक नहीं कर सका! ऐसा लगता है कि आपके पास jekyll-last-modified नहीं है -ट .... "मैं गिथब का उपयोग करता हूं, इसलिए यदि यह श्वेतसूची नहीं है तो यह मेरे लिए अच्छा नहीं है ;-) – Athanassios
यदि आप गिट का उपयोग कर रहे हैं, तो आप एक पूर्व-प्रतिबद्ध हुक स्थापित कर सकते हैं जो संशोधित फ़ाइलों के सामने के मामले में दिनांक फ़ील्ड को स्वचालित रूप से अद्यतन करता है। मैं यह जानकर बहुत हैरान था कि प्री-प्रतिबद्ध हुक वास्तव में प्रतिबद्धता की सामग्री को बदल सकता है! - आप केवल मैन्युअल रूप से भंडार में से प्रत्येक के क्लोन में एक पूर्व प्रतिबद्ध हुक स्थापित किया है निम्नलिखित किसी न किसी मसौदा पूरी वेबसाइट के समग्र संशोधन समय अद्यतन करने के लिए मेरे लिए काम करता है:
#!/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।
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:
फ़ील्ड का उपयोग करता हूं।
gh-पृष्ठों का उपयोग करके wfm! {% जब तक page.nodate%} {{page.date | जोड़ना था दिनांक: "% b% -d,% y"}} _% अंतहीन%} _layouts में मेरे docpage.html पर और दिनांक जोड़ें: प्रत्येक फ़ाइल के सामने के मामले में। यह कितना अच्छा क्रिसमस मौजूद था यह खोजना था। – catpaws
एक आकर्षण की तरह काम करता है! केवल एक चीज जो मैंने बदल दी थी वह दिनांक प्रारूप था। मैं 'तारीख" +% वाई-% एम-% डी% टी% जेड "का उपयोग कर रहा हूं जो 'वर्तमान (डिफ़ॉल्ट) डिफ़ॉल्ट जेकिल दिनांक प्रारूप से मेल खाता है। –
क्या पोस्ट या सामान्य रूप से यह संभव नहीं है? पदों के लिए मुझे अपनी संशोधन तिथि प्राप्त करने की आवश्यकता नहीं दिखाई देती है, क्योंकि फ़ाइल नाम में एन्कोड की गई तारीख ठीक है (मैं शायद ही कभी पोस्ट बदलता हूं)। हालांकि, अन्य सभी मार्कडाउन फ़ाइलों के लिए जेकील प्रसंस्करण कर रहा है, मेरे पास उस तारीख नहीं है और इसे वाईएएमएल फ्रंटमेटर में एन्कोड किया गया है। चूंकि ये फ़ाइलें अक्सर बदलती हैं, इसलिए मैं उनकी संशोधन तिथि स्वचालित रूप से प्राप्त करना चाहूंगा। – Robert
आपके द्वारा वर्णित सुविधा या तो पोस्ट या पृष्ठों के लिए जेकील में नहीं बनाई गई है। मुझे लगता है कि सिद्धांत में आप एक [जेकिल प्लगइन] (https://github.com/mojombo/jekyll/wiki/Plugins) लिख सकते हैं जो रूबी के 'File.mtime' का उपयोग करता है, लेकिन यह इसके लायक से अधिक परेशानी की तरह लगता है। इसके अलावा, कुछ अनपेक्षित परिणाम हो सकते हैं। क्या होगा, उदाहरण के लिए, आप अपनी संशोधन तिथि अपडेट किए बिना किसी पृष्ठ के फ्रंटमेटर को संपादित करना चाहते हैं? मुझे लगता है कि एक कस्टम वैरिएबल जाने का सबसे अच्छा तरीका है। –