2010-08-24 20 views
8

रेल के साथ गतिशील सीएसएस बनाने का सबसे अच्छा/सबसे प्रभावी तरीका क्या है। मैं एक साइट पर एक व्यवस्थापक क्षेत्र विकसित कर रहा हूं, जहां मैं चाहता हूं कि कोई उपयोगकर्ता अपनी प्रोफाइल (ज्यादातर रंग) की शैली को अनुकूलित करने में सक्षम हो, जो भी सहेजा जाएगा।मैं रेल में गतिशील सीएसएस कैसे बना सकता हूं?

क्या आप सीएसएस फ़ाइल में रूबी स्क्रिप्ट एम्बेड करेंगे? क्या आपको सीएसएस से फ़ाइल एक्सटेंशन बदलना होगा?

धन्यवाद।

उत्तर

1

वर्तमान में रेल में गतिशील सीएसएस उत्पन्न करने के लिए बहुत सारे विकल्प हैं।

आप less css का उपयोग कर सकते हैं - अतिरिक्त सुविधाओं के साथ सीएसएस का विस्तार है।

जेम Less css for railsasset pipeline में कम स्टाइलशीट भाषा का उपयोग कर रेल परियोजनाओं के लिए एकीकरण प्रदान करता है।

यदि आप ट्विटर बूटस्ट्रैप का उपयोग कर रहे हैं तो आप इसे less rails bootstrap देख सकते हैं।

इसके अलावा आप सीएसएस उत्पन्न करने के लिए एक और सीएसएस एक्सटेंशन भाषा Sass का उपयोग कर सकते हैं। यहां एक Saas rails gem है।

Dynamic CSS in Rails और Render Rails assets to string ब्लॉग पोस्ट और लेख को देखें के बारे में Asset Pipeline

संबंधित SO सवाल:

+0

ध्यान दें कि यदि आपके पास अपनी कम फ़ाइल में कोई डेटाबेस निर्भर तर्क है, तो यह हेरोोकू पर तैनात नहीं होगा। – Trip

2

आप सीएसएस के साथ ईआरबी का उपयोग कर सकते हैं, आपको बस नियंत्रक में सीएसएस प्रस्तुत करने की आवश्यकता है। हालांकि, इस तरह के भारी अनुरोधित संसाधन के लिए, मैं हर बार इसे उत्पन्न करने की अनुशंसा नहीं करता हूं। मैं उपयोगकर्ता स्टाइलशीट को memcached या redis में संग्रहीत करता हूं, और प्रत्येक बार फ़ाइल को पुन: प्रस्तुत करने के बजाए पृष्ठ लोड होने पर इसे याद करता है। जब वे अपनी शैली को अपडेट करते हैं, तो आप कैश की समयसीमा समाप्त कर सकते हैं, बस सुनिश्चित करें कि पृष्ठ प्रस्तुत होने पर इसे पुनर्निर्मित किया जाता है।

+0

फोर रेल 3.2: http://stackoverflow.com/questions/4729282/best-way-to-handle-dynamic-css-in-a-rails-app –

0

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

यहाँ स्वचालित रूप से सीएसएस फ़ाइलें जब भी पैदा करने के लिए ERB कोड

#header { background: <%= @colors["Header Stripe Background"] %>; border: 1px solid <%= @colors["Header Stripe Border"] %>; } 
#header h1 {color: <%= @colors["Headline Color"] %>; } 
#header p a { background: <%= @colors["Control Link Background"] %>; color: <%= @colors["Control Links"] %>;} 
#header p a:hover {background: <%= @colors["Control Link Hover"] %>; text-decoration:underline;} 
0

यह समाधान config/site_settings.rb में कुछ स्थिरांक को परिभाषित करता है, जो तब रेल आवेदन भर इस्तेमाल किया जा सकता से एक उदाहरण है, साथ ही रेल एप्लिकेशन शुरू होता है और सीएसएस इनपुट फ़ाइलें संशोधित किया गया है ..

http://unixgods.org/~tilo/Ruby/Using_Variables_in_CSS_Files_with_Ruby_on_Rails.html

20

रेल 3.1 में, आप अपने स्टाइलशीट ERB द्वारा पूर्व-संसाधित कर दिया है सकते हैं।

अब मान लें कि आपके पास कुछ गतिशील स्टाइल है जिसे dynamic.css.scss.erb कहा जाता है (.erb अंत में महत्वपूर्ण है!) app/assets/stylesheets में। यह (और फिर सास से) ERB द्वारा प्रक्रिया की जाएगी, और जैसे जैसे

.some_container { 
    <% favorite_tags do |tag, color| %> 
    .tag.<%= tag %=> { 
     background-color: #<%= color %>; 
    } 
    <% end %> 
} 

सामान शामिल कर सकते हैं आप इसे किसी भी स्टाइलशीट की तरह शामिल कर सकते हैं।

यह कितना गतिशील होना चाहिए?

ध्यान दें कि इसे केवल एक बार संसाधित किया जाएगा, हालांकि, यदि मान बदलते हैं, तो स्टाइलशीट नहीं होगा।

मुझे नहीं लगता कि यह अभी तक पूरी तरह से गतिशील होने का एक सुपर कारगर तरीका है, लेकिन सभी अनुरोधों के लिए सीएसएस उत्पन्न करना अभी भी संभव है। इसे ध्यान में रखते चेतावनी के साथ, यहां रेल 3.1 में उस के लिए एक सहायक है:

पहले, app/helpers/application_helper.rb में ऊपर सहायक कॉपी:

def style_tag(stylesheet) 
    asset = YourApplication::Application.assets[stylesheet] 
    clone = asset.class.new(asset.environment, asset.logical_path, asset.pathname, {}) 
    content_tag("STYLE", clone.body.html_safe, type:"text/css") 
    end 

इसका इस्तेमाल करने के लिए है।

तब आप अपने पेज में शामिल कर सकते इस प्रकार है:

<% content_for :head do %> 
    <%= style_tag "dynamic.css" %> 
<% end %> 
The rest of your page. 

सुनिश्चित करें कि आपके लेआउट सामग्री :head उपयोग करता है।

... 
<HEAD> 
    .... 
    <%= yield :head %> 
</HEAD> 
... 

मैं इस this post करने के लिए धन्यवाद पता चला: उदाहरण के लिए, अपने layout/application.html.erb की तरह लग सकता है।

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