Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

H2 हेडिंग से ऑटो-जेनरेट सबनेव के लिए जेकिल प्लगइन बनाएं

H2 हेडिंग से ऑटो-जेनरेट सबनेव के लिए जेकिल प्लगइन बनाएं

मैं जेकिल का उपयोग करके अपनी डॉक्यूमेंटेशन साइट को पुनर्निर्माण कर रहा हूँ। चूंकि हमारे डॉक्यूमेंटेशन पेज काफी बड़े हैं, इसलिए टॉप-लेवल नेविगेशन के अलावा हमें किसी प्रकार के सबनेविगेशन की आवश्यकता है।

इस पोस्ट में हम कवर करेंगे कि एक साधारण जेकिल प्लगइन कैसे बनाया जाए जो आपके पोस्ट या पेज में हेडिंग से सबनेव लिंक उत्पन्न कर सकता है।

अवलोकन

मैंने इस प्रोजेक्ट को निम्नलिखित कार्यों में विभाजित किया है:

  1. एक जेकिल जनरेटर बनाएं जो साइट पर हर पेज के खिलाफ चलता है।
  2. जनरेटर को सिखाएं कि पेज को प्री-रेंडर कैसे करें ताकि यह हेडिंग जानकारी निकाल सके।
  3. पेज के HTML को पार्स करने और प्रासंगिक हेडिंग और कंटेंट निकालने के लिए नोकोगिरी का उपयोग करें।
  4. सबनेविगेशन रेंडर करें।

नीचे दिए गए उदाहरणों में सभी सबनेव लिंक एंकर लिंक हैं। इस दृष्टिकोण के काम करने के लिए, आपको यह सुनिश्चित करना होगा कि आपका मार्कडाउन प्रोसेसर हेडिंग के लिए आईडी बनाता है। with_toc_data विकल्प के साथ RedCarpet अच्छी तरह से काम करता है।

एक बुनियादी जेकिल जनरेटर

कुछ अलग प्रकार के प्लगइन्स हैं जिन्हें आप जेकिल के लिए बना सकते हैं। हम एक जनरेटर बनाने जा रहे हैं।

जनरेटर केवल Jekyll::Generator से इनहेरिट करने वाली क्लास हैं और जो generate नामक एक मेथड प्रदान करती हैं।

जनरेटर जेकिल द्वारा सभी मार्कडाउन फाइलों को लोड करने के बाद लेकिन उन फाइलों के HTML में परिवर्तित होने से पहले चलाए जाते हैं। एक site ऑब्जेक्ट generate मेथड में पास किया जाता है। और आप अपनी साइट के सभी पेज, पोस्ट और अन्य संसाधनों तक पहुंचने के लिए साइट ऑब्जेक्ट का उपयोग कर सकते हैं।

नीचे दिए गए उदाहरण में, हम एक जनरेटर बनाते हैं जो सभी पेज के माध्यम से लूप करता है और उनके शीर्षक प्रिंट करता है।

class MySubnavGenerator < Jekyll::Generator def generate(site) site.pages.each do |page| puts page.data["title"] end end end 

हम जनरेटर के अंदर पेज और साइट डेटा को भी संशोधित कर सकते हैं -- फ्रंट-मैटर और साइट कॉन्फिगरेशन फाइल से लोड किया गया डेटा।

 page.data["title"] += " - modified!" site.data["tagline"] 

मार्कडाउन को HTML में प्री-रेंडर करना

हम अपने मार्कडाउन दस्तावेज़ से हेडिंग निकालना चाहते हैं। ऐसा करने का सबसे सरल तरीका है मार्कडाउन को HTML में परिवर्तित करना फिर HTML को नोकोगिरी जैसे टूल का उपयोग करके पार्स करना।

क्या यह मुझे थोड़ा गंदा महसूस कराता है? हाँ। क्या यह थोड़ा धीमा होगा? बिल्कुल। लेकिन चूंकि जेकिल एक स्टैटिक साइट जनरेटर है, मुझे रियल-टाइम प्रदर्शन के बारे में चिंता करने की ज़रूरत नहीं है। तो मैं बस अपनी नाक पकड़कर इसे पूरा करने जा रहा हूँ।

यहां, हम हर मार्कडाउन पेज को HTML में परिवर्तित करने के लिए जेकिल के बिल्ट-इन मार्कडाउन रैपर का उपयोग करते हैं।

class MySubnavGenerator < Jekyll::Generator def generate(site) parser = Jekyll::Converters::Markdown.new(site.config) site.pages.each do |page| if page.ext == ".md" html = parser.convert(page['content']) # Do something with the html here end end end end 

हेडिंग निकालना

हमारी नई डॉक्यूमेंटेशन साइट के लिए, मैंने तय किया कि हर H2 टैग का एक संबंधित सबनेविगेशन लिंक होना चाहिए। तो मैं प्रत्येक पेज के HTML को पार्स करने के लिए नोकोगिरी का उपयोग करूंगा, फिर मैं पेज से प्रत्येक H2 टैग को निकालूंगा।

अभी के लिए, हम सिर्फ H2 की सामग्री और आईडी को स्क्रीन पर प्रिंट करेंगे:

require "nokogiri" class MySubnavGenerator < Jekyll::Generator def generate(site) parser = Jekyll::Converters::Markdown.new(site.config) site.pages.each do |page| if page.ext == ".md" doc = Nokogiri::HTML(parser.convert(page['content'])) doc.css('h2').each do |heading| puts "#{ heading.text }: #{ heading['id'] }" end end end end end 

सबनेविगेशन मेनू बनाना

अब जब हमारे पास हेडिंग का टेक्स्ट और आईडी है तो हम सबनेविगेशन लिंक की एक सूची बना सकते हैं।

हम इस लिंक की सूची को पेज के डेटा एट्रिब्यूट के रूप में संग्रहीत करेंगे। इस तरह, हम अपने पेज टेम्पलेट से लिंक तक पहुंच सकते हैं।

require "nokogiri" class MySubnavGenerator < Jekyll::Generator def generate(site) parser = Jekyll::Converters::Markdown.new(site.config) site.pages.each do |page| if page.ext == ".md" doc = Nokogiri::HTML(parser.convert(page['content'])) page.data["subnav"] = [] doc.css('h2').each do |heading| page.data["subnav"] << { "title" => heading.text, "url" => [page.url, heading['id']].join("#") } end end end end end 

अब, अपने टेम्पलेट में, आप सबनेव के माध्यम से लूप कर सकते हैं और प्रत्येक लिंक प्रदर्शित कर सकते हैं:

{% for item in page.subnav %} <a href="{{ item.url }}">{{ item.title }}</a> {% endfor %} 

समस्या निवारण

जैसा कि मैंने पहले उल्लेख किया है, यह सब आपके मार्कडाउन प्रोसेसर पर निर्भर करता है जो प्रत्येक हेडिंग के लिए अद्वितीय आईडी बनाता है। यहाँ मेरे _config.yml से मार्कडाउन सेटिंग्स हैं:

# Use the redcarpet Markdown renderer markdown: redcarpet redcarpet: extensions: [ 'no_intra_emphasis', 'fenced_code_blocks', 'autolink', 'strikethrough', 'superscript', 'with_toc_data', 'tables', 'hardwrap' ] 

अगला क्या...

उपरोक्त दृष्टिकोण अच्छा काम करता है यदि आपको केवल एक स्तर के सबनेविगेशन की आवश्यकता है। लेकिन क्या होगा अगर आपको अधिक की आवश्यकता है? यानी यदि आप चाहते हैं कि H2 के "अंदर" सभी H3 टैग आपके मेनू में सब-सबनेविगेशन लिंक बनाएं?

हम इसे और अधिक भविष्य के ब्लॉग पोस्ट में कवर करेंगे। तो बने रहें!


  1. Windows 10 पर स्वचालित Edge क्रोमियम अपडेट रोकें: चरण-दर-चरण मार्गदर्शिका Windows 10 पर स्वचालित Edge क्रोमियम अपडेट रोकें: चरण-दर-चरण मार्गदर्शिका

    चूंकि KB4559309 अपडेट इंस्टॉल करने के बाद क्रोम-आधारित Edge ब्राउज़र की स्वचालित डिलीवरी आपके कंप्यूटर को धीरे-धीरे शुरू और चलाने का कारण बन सकती है, इस लेख में आपको Windows 10 में Edge क्रोमियम को स्वचालित रूप से इंस्टॉल होने से रोकने के निर्देश मिलेंगे। Microsoft Edge का नया क्रोमियम-आधारित संस्कर

  1. वेबसाइट डेटा को एक्सेल में स्वचालित रूप से खींचें: चरण-दर-चरण मार्गदर्शिका वेबसाइट डेटा को एक्सेल में स्वचालित रूप से खींचें: चरण-दर-चरण मार्गदर्शिका

    डेटा निकालना (डेटा संग्रह और अद्यतन) एक वेब पेज से स्वचालित रूप से आपकी एक्सेल वर्कशीट में कुछ नौकरियों के लिए महत्वपूर्ण हो सकता है। एक्सेल आपको वेब पेज से डेटा एकत्र करने का अवसर देता है। यह उन लोगों के लिए सबसे अधिक उपयोग की जाने वाली एक्सेल सुविधाओं में से एक है जो अपने डेटा विश्लेषण कार्य के लि

  1. विंडोज 10 पर स्काइप ऑटो-स्टार्ट रोकें: इसे लॉन्च होने से रोकने के आसान चरण विंडोज 10 पर स्काइप ऑटो-स्टार्ट रोकें: इसे लॉन्च होने से रोकने के आसान चरण

    एक बार जब आप अपना विंडोज पीसी खोलते हैं, तो स्काइप स्वचालित रूप से पॉप अप हो जाता है, और हम में से कुछ लोग इसी क्रिया से नाराज भी हो सकते हैं। लेकिन स्काइप का यह स्वचालित पॉप अप उन सभी संचारों जैसे कॉल, मैसेज, या शेयर्ड डॉक्यूमेंट को स्थानांतरित करने के लिए है जो आप पीसी पर उपलब्ध न होने पर चूक गए ह