2012-12-13 9 views
10

में प्रत्येक टैग के लिए पेज कैसे उत्पन्न करें मैं नैनोक में नया हूं और मैं अभी भी इसके आसपास अपना ढूंढ रहा हूं। मैं अपनी साइट तैयार करने में सक्षम हूं, यह अच्छा दिखता है और अच्छा काम भी करता है। लेकिन मुझे एक टैग क्षेत्र होना चाहिए। मैं इसे प्राप्त करने में सक्षम हूंनैनोक

<%= tags_for(post, params = {:base_url => "http://example.com/tag/"}) %> 

लेकिन मैं टैग के लिए पेज कैसे उत्पन्न करूं? इसलिए उदाहरण के लिए "एनएफएल" नामक एक टैग है, इसलिए जब भी कोई उपयोगकर्ता उस पर क्लिक करता है, तो उसे एनएफएल के अनुरूप लेखों की एक सूची के साथ http://example.com/tag/nfl पर निर्देशित किया जाना चाहिए।

मैं एक लेआउट सेट कर सकता हूं जो ऐसा करेगा। लेकिन फिर मैं किस प्रकार का तर्क इस्तेमाल कर रहा हूं? और इसके लिए मुझे एक सहायक होने की भी आवश्यकता है?

उत्तर

21

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

preprocess do 
    items << Nanoc::Item.new(
    "some content here", 
    { :attributes => 'here', :awesomeness => 5000 }, 
    "/identifier/of/this/item") 
end 

आप प्रत्येक टैग के लिए पृष्ठ चाहते हैं तो आप पहली बार सभी टैग इकट्ठा करने के लिए की जरूरत है। मैं एक सेट के साथ यह कर रहा हूँ क्योंकि मैं डुप्लिकेट नहीं करना चाहती: उनके लिए

require 'set' 
tags = Set.new 
items.each do |item| 
    item[:tags].each { |t| tags.add(t.downcase) } 
end 

अन्त में, सभी टैग से अधिक लूप और उत्पन्न आइटम:

tags.each do |tag| 
    items << Nanoc::Item.new(
    "", 
    { :tag => tag }, 
    "/tags/#{tag}/") 
end 

अब, आप एक विशिष्ट संकलन नियम बना सकते हैं के लिए/टैग/* /, ताकि इसे "टैग" लेआउट का उपयोग करके प्रस्तुत किया जा सके, जो टैग टैग का मान लेगा, इस टैग के साथ सभी आइटम ढूंढें और उन्हें एक सूची में दिखाएं। वह लेआउट कुछ हद तक इस तरह दिखेगा:

<h1><%= @item[:tag] %></h1> 
<ul> 
    <% items_with_tag(@item[:tag]).each do |i| %> 
    <li><%= link_to i[:title], i %></li> 
    <% end %> 
</ul> 

और, व्यापक स्ट्रोक में, आप जो चाहते हैं वह होना चाहिए!

+0

बहुत बढ़िया धन्यवाद :) – user1758162

+5

ध्यान दें कि यदि आपके पास असंगत रूप से सामान्यीकृत टैग हैं, तो आप यहां "डुप्लिकेट" के साथ समाप्त हो जाएंगे ... और यदि आपके पास केस-असंवेदनशील फाइल सिस्टम है तो यह आपको सभी तरह के भ्रम का कारण बन सकता है रेखा। अपने आप को सिरदर्द बचाएं और 'टैग.डाउनकेस' या कुछ पहले :) – bobthecow

+0

यह एक अच्छा जवाब है, यह दस्तावेज @ddfreyne में होना चाहिए;)। –