2013-09-07 6 views
26

जेकिल लेआउट में, क्या यह पता लगाने का कोई तरीका है कि पृष्ठ एक सामान्य पृष्ठ या पोस्ट है या नहीं? मैं पोस्ट खिताब प्रदर्शित करना चाहता हूं, लेकिन पृष्ठ शीर्षक नहीं। इस तरह:जैकिल - पृष्ठ एक पोस्ट है तो लेआउट बदलें?

{% if page.is_post? %} 
    <h2>{{ page.title }}</h2> 
{% endif %} 
{{ content }} 

उत्तर

25

Jekyll 2.0 के बाद से, आप Front Matter Defaults उपयोग कर सकते हैं:

defaults: 
    - 
    scope: 
     path: ""  # empty string for all files 
     type: posts # limit to posts 
    values: 
     is_post: true # automatically set is_post=true for all posts 

तो आप पेज पोस्ट है कि क्या जांच करने के लिए {{ page.is_post }} उपयोग कर सकते हैं।

कोई विचार नहीं कि जेकिल डिफ़ॉल्ट रूप से page.type सेट क्यों नहीं करता है।

11

सामने के मामले में एक पोस्ट लेआउट घोषित करना पर्याप्त नहीं है? अपनी पोस्ट एक post लेआउट का उपयोग करता है क्या आप वाकई पेज एक पोस्ट कर रहे हैं और आप अतिरिक्त तर्क

--- 
layout: post 
--- 

BTW एक त्वरित और गंदा (बहुत गंदा) जिस तरह से पेज टाइप करने के लिए होते हैं निर्धारित करने के लिए जोड़ने के लिए की जरूरत नहीं है पेज पथ की जांच आम तौर पर पोस्ट कर रहे हैं _posts निर्देशिका के अंतर्गत ताकि आप जाँच कर सकते हैं यह

{% if page.path contains '_posts' %} 
This page is a post 
{% else %} 
This page is a normal page 
{% endif %} 
+0

मेरे लेआउट एचटीएमएल के बारे में 50 लाइनों है, इसलिए मैं दो प्रतियां कि केवल एक ही लाइन से अलग नहीं करना चाहते । हालांकि जानकारी के लिए धन्यवाद, आपने मुझे यह विचार दिया है कि यह कैसे करें! – Zaz

+0

@ जोश: आप दूसरे के लिए एक लेआउट लागू कर सकते हैं। – jdh8

7

यहाँ कैसे मैं समस्या हल हो गई है:

  1. एक एसवाई बनाएं से _layouts/post_layouts/main
  2. बदलें पदों के लेआउट post को mlink:

    --- 
    layout: post 
    --- 
    
  3. तो जैसे _layouts/main में एक अगर बयान जोड़ें:

    {% if page.layout == 'post' %} 
        <h2>{{ page.title }}</h2> 
    {% endif %} 
    


एक बेहतर तरीका इसे सुलझाने के लिए इस्तेमाल किया जा सकता है और इसमें दो अलग-अलग लेआउट हैं जैसे कि @ डफी ने कहा।

+6

'लेआउट' होना चाहिए 'page.layout'? – davidtingsu

+0

@ डेविडिंग्सु: फिक्स्ड। धीमी प्रतिक्रिया के लिए खेद है। – Zaz

+0

मैंने एक सिम्लिंक नहीं बनाया, एकल चरण 3 मेरे लिए ठीक काम करता है :) –

2

पोस्ट date चर के साथ आते हैं, जबकि पृष्ठ नहीं होते हैं।

{% if page.date %} 
    <h2>{{ page.title }}</h2> 
{% endif %} 
+0

पोस्ट भी 'आईडी' चर के साथ आते हैं। मैं व्यक्तिगत रूप से 'पेज.आईडी' का उपयोग करना चाहता हूं ताकि यह जांच सके कि यह एक पोस्ट है या नहीं। – kimbaudi

2

निर्धारित करने के लिए अपने एक पृष्ठ या एक पोस्ट page.id उपयोग करने के लिए है अगर सबसे आसान और सबसे सरल तरीके:

जबकि बुलेटप्रूफ नहीं, तो इस समाधान के लिए कोई अतिरिक्त विन्यास की आवश्यकता है।

{% if page.id %} 
    This is a post 
{% endif %} 

मैं व्यक्तिगत रूप से अगर इसकी एक पेज का निर्धारण या तो पोस्ट मैं पिछली/अगली पोस्ट केवल अपने पर किसी पोस्ट के लिंक दिखा सकते हैं करने के लिए अपने लेआउट पेज में इस विधि का उपयोग।

_layouts/डिफ़ॉल्ट।एचटीएमएल

<!DOCTYPE html> 
<html lang="en"> 

{% include head.html %} 

<body> 

{% include header.html %} 

{{ content }} 

<!-- If this is a post, show previous/next post links --> 
{% if page.id %} 

{% if page.previous.url %} 
<a href="{{page.previous.url}}">{{page.previous.title}}</a> 
{% endif %} 

{% if page.next.url %} 
<a class="button is-link ellipsis" title="{{page.previous.title}}" href="{{page.next.url}}">{{page.next.title}}</a> 
{% endif %} 

{% endif %} 

{% include footer.html %} 

</body> 
</html> 
+0

पोस्ट किए गए प्रश्न के उत्तर में सशर्त सामग्री प्रदर्शन के लिए पूरी तरह से काम करता है - धन्यवाद! (यकीन नहीं है कि इसे क्यों वोट दिया जाना चाहिए, कुछ लोगों के अलावा SO पर ऐसा करने का आनंद मिलता है।) – SexxLuthor

0

आप सभी प्रकार के लिए _config.yml चूक में प्रकार सेट कर सकते,:

defaults: 
    - scope: 
     path: "" 
     type: "pages" 
    values: 
     type: "pages" 
संबंधित मुद्दे