2016-12-20 9 views
5

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

निर्देशिका संरचना का एक उदाहरण:

Source 
+--config.rb 
+--includes 
    +--file.md 
    +--otherfile.md 
+--index.html 
+--layouts 
    +--layout.erb 

Gist of layout and config.rb

इस के लिए Config.rb टुकड़ा: इस के लिए

require 'nokogiri' 

helpers do 
def toc_data(page_content) 
    html_doc = Nokogiri::HTML::DocumentFragment.parse(page_content) 

    # get a flat list of headers 
    headers = [] 
    html_doc.css('h1, h2, h3').each do |header| 
     headers.push({ 
     id: header.attribute('id').to_s, 
     content: header.content, 
     level: header.name[1].to_i, 
     children: [] 
     }) 
    end 

    [3,2].each do |header_level| 
     header_to_nest = nil 
     headers = headers.reject do |header| 
     if header[:level] == header_level 
      header_to_nest[:children].push header if header_to_nest 
      true 
     else 
      header_to_nest = header if header[:level] == (header_level - 1) 
      false 
     end 
     end 
    end 
    headers 
    end 
end 

लेआउट टुकड़ा:

<ul id="toc" class="toc"> 
    <% toc_data(page_content).each do |h1| %> 
     <li> 
     <a href="#<%= h1[:id] %>" class="toc-h1"><%= h1[:content] %></a> 
      <ul class="toc-section"> 
      <% h1[:children].each do |h2| %> 
       <li> 
       <a href="#<%= h2[:id] %>" class="toc-h2"><%= h2[:content] %></a> 
       <ul class="toc-submenu"> 
        <% h2[:children].each do |h3| %> 
        <li> 
         <a href="#<%= h3[:id] %>" class="toc-h3"><%= h3[:content] %></a> 
        </li> 
        <% end %> 
       </ul> 
       </li> 
      <% end %> 
      </ul> 
     </li> 
    <% end %> 
    </ul> 
... 
    <div class="page-wrapper"> 
    <div class="content"> 
    <%= page_content %> 
    <% current_page.data.includes && current_page.data.includes.each do |include| %> 
     <%= partial "includes/#{include}" %> 
    <% end %> 
    </div> 
</div> 

वर्तमान में, index.html फ़ाइल के केवल शीर्षलेख आबादी प्राप्त कर रहे हैं और शामिल आंशिक से कुछ भी नहीं। मेरा मानना ​​है कि मुझे ready सहायक का उपयोग करके similar to what is described in the Middleman docs for sitemaps पोस्ट बिल्ड होने के लिए मौजूदा सहायक की आवश्यकता हो सकती है। मेरा मानना ​​है कि मुझे कॉन्फ़िगरेशन कोड में एक और परिवर्तन करना है ताकि यह page_content के बाहर अतिरिक्त सामग्री को कैप्चर कर सके, लेकिन मुझे यकीन नहीं है कि परिचितता की कमी के कारण क्या है। कोई भी संकेतक प्रशंसनीय होंगे।

संपादित करें: मध्यस्थ मूलभूत दस्तावेज़ों को देखने के बाद, पैड्रिनो ढांचे से दो सहायक होते हैं जो मैं उपयोग कर सकता हूं: capture_html और concat_content। मैं यह जानने की कोशिश कर रहा हूं कि सहायक page_content को मेरे द्वारा किए जा रहे विशिष्ट परिवर्तनों के लिए अतिरिक्त संदर्भ प्राप्त करने के लिए परिभाषित किया गया है।

उत्तर

0

पेज_content के साथ आंशिक के साथ वर्तमान पृष्ठ डेटा को संयोजित करने के लिए, नीचे दिए गए कोड का उपयोग करें। यह एक पूर्ण पृष्ठ उत्पन्न करने के लिए आवश्यक सभी चीजों को भी बदलता है।

<% 
    if current_page.data.includes 
    current_page.data.includes.each do |include| 
     page_content += partial("includes/#{include}") 
    end 
    end 
%> 
... 
<%= page_content %> 
1

उस ढांचे से परिचित नहीं है लेकिन toc_data(page_content) जैसा दिखता है केवल मुख्य सामग्री को देखता है लेकिन current_page.data.includes आंशिक रूप से नहीं।

तो अनुमान लगाएं कि आपको आंशिक रूप से toc_data फ़ंक्शन में भी पास करने की आवश्यकता है।

शायद यह काम करता है?

<% 
    full_content = page_content 
    current_page.data.includes && current_page.data.includes.each do |include| 
    full_content += partial("includes/#{include}") 
    end 
    toc_data(full_content).each do |h1| 
%> 
    ... 
<% end %> 

आशा है कि मदद करता है।

+0

ऐसा लगता है कि मुझे उस त्रुटि के आधार पर इसे मध्यस्थ के लिए परिभाषित करने के लिए इसके साथ खेलना पड़ सकता है। कोशिश करने के लिए मुझे कुछ देने के लिए धन्यवाद! मैं के साथ खेल रखेंगे इस '' 'NameError: अपरिभाषित स्थानीय चर या विधि # के लिए' full_content '<# <वर्ग: 0x007fdd621f2650>: 0x007fdd61e97190> \t लेआउट/apitwocolumn.erb: 92: 'सिंगलटन वर्ग में ब्लॉक में ' \t लेआउट/apitwocolumn.erb: -7: 'instance_eval में' \t लेआउट/apitwocolumn.erb: -7: -9:' सिंगलटन वर्ग ' \t लेआउट/apitwocolumn.erb में '__tilt_70294461913540'''' में – Alyss

+0

यह वास्तव में अंत समाधान वास्तव में बंद था! काश मैं कोड पर थोड़ी देर काम किया था। – Alyss