2012-02-02 11 views
11

में कस्टम पेज-आधारित लूप बनाएं, मैं एक और पेज-आधारित लूप बनाना चाहता हूं, उसी तरह _posts फ़ोल्डर ब्लॉग अनुभाग के लिए काम करता है, लेकिन पत्रिकाओं की एक छोटी सूची के लिए। (उम्मीद है कि समझ में आता है)जेकिल

शायद मैं कुछ सरल गलत समझ रहा हूं, लेकिन मैं इसे काम नहीं कर सकता। मेरे पास यह लूप है, जो ऐसा लगता है जैसे इसे काम करना चाहिए, लेकिन कुछ भी वापस नहीं आ जाता है।

{% for page in site.pressitems %} 
<li> 
    <a href="{{ post.url }}">{{ page.title }}</a> 
</li> 
{% endfor %} 

कोड, लिंक, स्पष्टीकरण, कुछ भी बहुत सराहना की है। :)

उत्तर

18

आप अपना खुद का संग्रह site पर इस तरह जोड़ नहीं सकते हैं।

site केवल तीन संग्रहों के बारे में जानता है: pages, posts, और categories। आप site.<category>.posts कर कर किसी श्रेणी के सभी पद प्राप्त कर सकते हैं। AFAIK, श्रेणियां केवल पोस्ट के लिए काम करती हैं, पेज नहीं।

यह समझ में आता है, क्योंकि जैकिल मुख्य रूप से एक ब्लॉगिंग इंजन होना चाहिए, न कि एक सामान्य स्थिर वेबसाइट जनरेटर।

तो आपका सबसे अच्छा समाधान अभी जेकिल पर "झूठ बोलना" शामिल है। इसे विश्वास करें कि आपके पास पोस्ट हैं, जब वास्तव में आप पेज बना रहे हैं।

_posts/ 
    pressitems/ 
    blog/ 

आप इस तरह के अंदर _posts/pressitems तत्वों से अधिक पाश में सक्षम हो जाएगा:

for p in site.categories.blog.posts do 
    ... {{ p.title }} ... {{ p.url }} 
endfor 

:

for item in site.categories.pressitems.posts do 
    ... {{ item.title }} ... {{ item.url }} 
endfor 

इसी तरह, अपने 'असली ब्लॉग प्रविष्टियों "इस तरह से जाना होगा पकड़ यह है कि आपको फ़ाइल नामों के बारे में जेकिल के नामकरण सम्मेलन का सम्मान करना होगा; आपके प्रेसिटम्स को असली पोस्ट की तरह दिखना होगा। इसका मतलब है कि उन्हें नामों की तरह एक yyyy-mm-dd-string से शुरू करना होगा। बस उन्हें एक यादृच्छिक तारीख दें।

_posts/ 
    pressitems/ 
    1901-01-01-the-first-press-item.textile 
    1902-01-01-the-second-one.textile 

संपादित करें: यह पोस्ट सच था जब यह पोस्ट मूल रूप से 2012 में लिखा गया था, लेकिन अब और नहीं। आधुनिक Jekyll आप के माध्यम से site.pages

{% for page in site.pages %} 
    <h3><a href="{{ page.url }}">{{ page.title }}</a></h3> 
    <p>{{ page.content }}</p> 
{% endfor %} 

अपने खुद के संग्रह https://jekyllrb.com/docs/collections/

+0

इसे समझाने के लिए धन्यवाद। बहुत मदद मिली – PaulAdamDavis

+1

मुझे लगता है कि यह 'endfor' होना चाहिए, लेकिन मुझे गलत हो सकता है। – Zaz

+0

अद्यतन, धन्यवाद! – kikito

11

आप पुनरावृति कर सकते हैं बना सकते हैं और इस सूची में केवल पृष्ठों है कि एक विशेष लेआउट का उपयोग को सीमित करने की अनुमति नहीं देता। http://vvv.tobiassjosten.net/jekyll/jekyll-sitemap-without-plugins/

+0

बहुत उपयोगी, धन्यवाद। मैंने इसे अपने स्वयं के उपयोग के मामले में अनुकूलित किया है: साइट पर _other_ पृष्ठों को सूचीबद्ध करना। ऐसा करने के लिए मैंने 'पेज.permalink! = P.permalink'' स्थिति को जोड़ा है (नामस्थान संघर्ष से बचने के लिए 'पृष्ठ' के बजाय 'पृष्ठ' के बजाय इटरेटर मान के रूप में उपयोग करना)। –

+0

यह बहुत उपयोगी था, धन्यवाद! यहां 'if' तर्क का थोड़ा सा लंबा सफर तय करता है –

3

Jekyll आप भी पृष्ठों के लिए YAML सामने बात जोड़ सकते हैं पर:

{% for page in site.pages %} 
    {% if page.layout == 'team' %} 
    <h3><a href="{{ page.url }}">{{ page.title }}</a></h3> 
    <p>{{ page.content }}</p> 
    {% endif %} 
{% endfor %} 

एक साइटमैप पैदा करने के बारे में यह पोस्ट देखें। पृष्ठ-श्रेणी जैसी कस्टम फ्रंट-केस जोड़ने में कुछ भी गलत नहीं है। Jekyll 2.5 में

{% for page in site.pages %} 
    {% if page.page-category == "category 1" %} 
     {{ page.content }} 
    {% endif %} 
{% endfor %} 
10

:

--- 
layout: plain 
title: "My beautiful page" 
description: "" 
snippet: "" 
page-category: "category 1" 
--- 

के माध्यम से उन तक पहुंचें।3 आप वास्तव में कर सकते हैं साइट पर अपना खुद का collection जोड़ें।

_my_collection फ़ोल्डर को रूट और दस्तावेज़ों से भरने के लिए जोड़ें। _config.yml में जोड़ें: संग्रह: - my_collection

अब या तो पोस्ट, पेज, या श्रेणी का उपयोग कर दस्तावेजों कहते हैं। उदा। { for post in site.my_collection < do something > }

यह ध्यान रखना महत्वपूर्ण है कि इस सुविधा का उपयोग किया जा सकता है इसे जैकिल टीम द्वारा "एक प्रयोगात्मक सुविधा के रूप में चिह्नित किया गया है और एपीआई तब तक बदल सकता है जब तक सुविधा स्थिर नहीं हो जाती"।

+0

यह अक्टूबर 2016 तक सही प्रतिक्रिया है – cwRichardKim

संबंधित मुद्दे