2012-04-22 8 views
6

मैं जेकील के लिए एक कस्टम टैग प्लगइन लिखने की कोशिश कर रहा हूं जो साइट पर सभी पृष्ठों (पोस्ट नहीं) के पदानुक्रमित नेविगेशन पेड़ को आउटपुट करेगा। मैं मूल रूप से एक निश्चित सीएसएस वर्ग द्वारा नोट किए गए वर्तमान पृष्ठ वाले पृष्ठों पर लिंक के साथ <ul> के लिंक (पृष्ठ टेक्स्ट के रूप में पृष्ठ शीर्षक के साथ) के साथ घोंसला घोंसला चाहता हूं।जेकिल प्लगइन से पृष्ठ डेटा प्राप्त नहीं कर सकता

मैं रूबी के साथ बहुत अनुभवहीन हूं। मैं एक PHP लड़का हूँ।

मुझे लगा कि मैं बस सभी पृष्ठों के माध्यम से पुनरावृत्ति करने की कोशिश कर रहा हूं और यह सुनिश्चित करने के लिए कि मैं कम से कम ऐसा कर सकता हूं, एक आयामी सूची आउटपुट करूँगा।

module Jekyll 

    class NavTree < Liquid::Tag 
    def initialize(tag_name, text, tokens) 
     super 
    end 

    def render(context) 
     site = context.registers[:site] 
     output = '<ul>' 
     site.pages.each do |page| 
     output += '<li><a href="'+page.url+'">'+page.title+'</a></li>' 
     end 
     output += '<ul>' 

     output 
    end 
    end 

end 

Liquid::Template.register_tag('nav_tree', Jekyll::NavTree) 

और मैं {% nav_tree %} के माध्यम से मेरी तरल टेम्प्लेट में डालने कर रहा हूँ: यहाँ क्या मैं अब तक राशि है।

समस्या यह है कि page उपरोक्त कोड में परिवर्तनीय सभी डेटा नहीं है जो आप चाहते हैं। page.title अपरिभाषित है और page.url इसके सामने एक फॉरवर्ड स्लैश वाला बेसनाम है (उदा। /a/b/c.html के लिए, यह सिर्फ मुझे /c.html दे रहा है)।

मैं क्या गलत कर रहा हूं?

साइड नोट: मैंने पहले से ही शुद्ध तरल मार्कअप के साथ ऐसा करने का प्रयास किया है, और अंत में मैंने छोड़ दिया। मैं आसानी से तरल के साथ site.pages के माध्यम से ठीक कर सकता हूं, लेकिन मैं सूचियों को उचित रूप से घोंसला करने का कोई तरीका नहीं समझ पाया।

+0

मैंने गिटहब पर एक मुद्दा बनाया [https://github.com/mojombo/jekyll/issues/548) यह देखने के लिए कि क्या कोई जवाब जानता है या नहीं। – jnrbsn

+0

क्या आपने कभी घोंसला काम करने का प्रबंधन किया था? अगर अंतिम – bwest

+0

@ ब्रैंड दुर्भाग्यवश, मैं इसे खत्म करने के लिए कभी नहीं मिला तो मुझे अंतिम कोड देखना अच्छा लगेगा। – jnrbsn

उत्तर

4

प्रयास करें:

module Jekyll 

    # Add accessor for directory 
    class Page 
      attr_reader :dir 
    end 


    class NavTree < Liquid::Tag 
    def initialize(tag_name, text, tokens) 
     super 
    end 

    def render(context) 
     site = context.registers[:site] 
     output = '<ul>' 
     site.pages.each do |page| 
     output += '<li><a href="'+page.dir+page.url+'">'+(page.data['title'] || page.url) +'</a></li>' 
     end 
     output += '<ul>' 

     output 
    end 
    end 

end 

Liquid::Template.register_tag('nav_tree', Jekyll::NavTree) 
+0

इस कोड के साथ, मुझे 'तरल त्रुटि मिलती है: शून्य को स्ट्रिंग में परिवर्तित नहीं कर सकता'। – jnrbsn

+1

आपके पास शायद शीर्षक के बिना एक पृष्ठ था, ताकि पेज.data ['title'] शून्य हो। डब्ल्यू/उदा। (पेज.data ['title'] || page.url)। –

+2

देरी से प्रतिक्रिया के लिए खेद है। तुम सही थे मेरे पास एक शीर्षक के बिना एक पृष्ठ था। आपका समाधान काम करता है। – jnrbsn

4

page.title हमेशा से परिभाषित नहीं है (उदाहरण: atom.xml)। आपको यह जांचना है कि क्या यह परिभाषित किया गया है या नहीं। तो फिर तुम page.name ले जा सकते हैं या नहीं प्रवेश की प्रक्रिया ...

def render(context) 
    site = context.registers[:site] 
    output = '<ul>' 
    site.pages.each do |page| 
    unless page.data['title'].nil? 
     t = page.data['title'] 
    else 
     t = page.name 
    end 
    output += "<li><a href="'+page.dir+page.url+'">'+t+'</a></li>" 
    end 
    output += '<ul>' 
    output 
end 
+0

छोटा करें जब तक कि थोड़ा सा न करें: 't = page.data ['title'] || page.name' – tamouse

0

हाल ही में मैं एक ऐसी ही समस्या जहां त्रुटि "स्ट्रिंग में nill परिवर्तित नहीं कर सकते" सिर्फ मेरे सिर बह रही है का सामना करना पड़ा। मेरी config.yml फ़ाइल में इस तरह की एक पंक्ति है "बेसुरल:/पैराडॉक्स/जेकील/आउट/" अब मेरे सर्वर के लिए मेरे स्थानीय के लिए मुझे उस beseurl खाली करने की आवश्यकता है और त्रुटि निर्माण समय में प्रकट होने लगती है मुझे "बेसूरल बनाना है:/" .. और यह मेरा काम है।