2009-09-06 15 views
7

मैं साइट के लिए कुछ स्थिर HTML पेज उत्पन्न करने के लिए HAML का उपयोग कर रहा हूं, और मैं सामान्य घटकों को आंशिक रूप से विभाजित करना चाहता था जिसे मैं कई पृष्ठों में शामिल कर सकता हूं, जैसे रेल में । हालांकि मैं ऐसा करने के लिए पूरे रेल स्टैक का उपयोग नहीं करना चाहता क्योंकि यह ओवरकिल जैसा लगता है।रेल के बाहर HAML के अंदर HAML आंशिक रूप से प्रस्तुत करना

मैं इंटरनेट पर चारों ओर देखा है, लेकिन कुछ भी, बस की तरह कुछ कर रही की तुलना में बेहतर नहीं मिला है:

Haml::Engine.new(IO.read("header.haml")).render 

वहाँ Haml के भीतर से आंशिक तथाकथित सहित की एक अच्छे तरीका है? एक मौजूदा फिल्टर या कमांड जो मुझे याद आ रही है?

उत्तर

6

स्थिर वेबसाइटों के निर्माण के लिए एक उपकरण के साथ हैम & एसएएस को गठबंधन करना सबसे अच्छा है। haml का समर्थन करता है कि Jekyll का एक कांटा -

मैं अपने ब्लॉग के Jekyll उपयोग कर रहा हूँ, लेकिन अगर आप एक ब्लॉग यह शायद आपके लिए उपयुक्त नहीं है का निर्माण नहीं कर रहे हैं।

+0

हालांकि Jekyll अच्छा लग रहा है , यह ब्लॉग के लिए काफी सुंदर है। हालांकि स्टेटिकमैटिक सिर्फ वही है जो मैं चाहता हूं। मैं खुद को कुछ ऐसा करने के बारे में सोच रहा था (यानी एएमबी का उपयोग एचएमएल टेम्पलेट्स के लिए प्री/पोस्ट प्रोसेसर के रूप में करें, जैसे सी कंपाइलर्स वर्ल)। धन्यवाद – Daemin

3

डर्न, आप सही हैं - एक अंतर्निहित तरीका नहीं है। मैंने haml कमांड लाइन के साथ हेल्पर्स का उपयोग किया है, लेकिन हमेशा जिनके आउटपुट पहले ही HTML स्वरूपित थे।

मेरा सबसे अच्छा सुझाव partial() विधि लिखना है और इसकी आवश्यकता है। ऐसा लगता है कि आप पहले ही इस पथ को शुरू कर चुके हैं। मैं सुझाव दूंगा कि इस तरह के एक समारोह को लिखने वाले किसी भी तरीके से मूल बाध्यकारी रखने पर विचार करें। Haml::Helpers#capture_hame ऐसा करने का सबसे आसान तरीका प्रतीत होता है।

यदि निष्पादन गति एक मुद्दा है, तो यह भी एक अच्छा विचार हो सकता है कि मेरब ऐसा करता है।

अगर किसी को कुछ कोड काम मिल रहा है, तो कृपया इसे GitHub पर रखें और यहां एक टिप्पणी करें।

0

सभी समाधान मेरे उद्देश्यों के लिए भारी लग रहे थे, हालांकि मैं मूल रूप से वही काम करने की कोशिश कर रहा हूं। यहां एक रूबी लिपि है जो मैंने लिखा है जो कि बहुत ही कम है - हैमल का मूल्यांकन = partial "test.haml" में कहीं भी आपको पसंद करने के विकल्प के साथ है। आंशिक फ़ाइल को खोजने और खोजने के लिए यह तर्क की एक छोटी राशि है।

require 'haml' 

def find filename 
    return filename if File.exists? filename 
    path = File.dirname ARGV[0] 
    filename = path+"/"+filename 
    return filename if File.exists? filename 
    throw "Could not find file." 
end 

def partial filename 
    source = File.read(find(filename)) 
    engine = Haml::Engine.new(source) 
    engine.render(binding) 
end 

puts partial ARGV[0] 

आप यह इतना की तरह निष्पादित करें: माणिक hamlize.rb input.haml> output.html

0

मैं एक ही समस्या थी। एक बार इस स्निपेट में बहुत सारी गणनाएं होती हैं (ग्राफ़ ड्राइंग के लिए) और जब भी कोई उपयोगकर्ता अनुरोध करता है तो यह सभी सामान अनावश्यक रूप से कर रहा था, सर्वर प्रतिक्रिया को अनुकूलित करने के लिए मुझे कुछ HTML स्निपेट उत्पन्न करने की आवश्यकता थी।

एक बार मेरे पास कई हैमल आंशिक रूप से विभाजित विचारों के बाद, मैं इसे HTML फ़ाइलों को उत्पन्न करने के लिए पुन: उपयोग करना चाहता था।

मेरा पहला दृष्टिकोण हैम्ल इंजन के साथ प्रयास कर रहा था, लेकिन एक बार जब मैं आंशिक रूप से अन्य आंशिक और एप्लिकेशन सहायक के कुछ कार्यों को प्रस्तुत करता हूं, तो यह काम नहीं करता था। अंतिम मैं एक समाधान है कि मॉडल है कि मैं एक HTML फ़ाइल (TO_HTML) बनाना चाहता था में एक समारोह बनाने के द्वारा पारित कर दिया यहाँ है पाया:

def to_html 
    ActionView::Base.send :include, ActionView::Helpers::ApplicationHelper 

    File.open(File.join(Rails.root, "public", 'test.html'), "w") do |file| 

    file.print ActionView::Base.new(Rails.configuration.paths["app/views"].first).render(
       :partial => 'partial_folder/partial', 
       :format => :html, 
       :locals => { :model => self} 
      ) 
    end 
end 

इस तरह, मैं पहले से ही किया partials का उपयोग करने में सक्षम था, एचटीएमएल फाइलों को मुद्रित करने के लिए। यह मेरे लिए काम करता है, शायद यह आपकी मदद भी कर सकता है।

0

मुझे अंत में मिला कि मैं जो खोज रहा था, इसलिए मैंने सोचा कि मैं आपके साथ अपना पता साझा करूंगा। आप बस एक ही वाक्य रचना आप पहली जगह में haml के लिए उपयोग का उपयोग कर सकते - http://www.semicomplete.com/blog/geekery/partials-in-haml-in-sinatra.html

/views/file.haml

%h3 Title 
%div= haml :content, :layout => false 

/views/content.haml

%p your content here 
+0

मैंने अभी देखा है कि यदि आप अपने स्थानीय लोगों को पास करना चाहते हैं, तो आपको "haml: content" कथन में "लोकल => स्थानीय" जोड़ना होगा – AxelTheGerman

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