पर आधारित ऑर्चर्ड सीएमएस में लेआउट-रैपर में कक्षा कैसे जोड़ें पृष्ठभूमि: मैं अपने होम पेज के लिए वैकल्पिक लेआउट बनाने से बचना चाहता हूं और मैं "थीम" रखना चाहता हूं मशीन "ज़ोन और लेआउट बरकरार रखने के बगल में, और वास्तव में" थीम "शुद्ध सीएसएस का उपयोग कर सबकुछ का सबसे अधिक है। तो मुझे चुनिंदा सीएसएस को विशिष्ट "पेज", और सबसे महत्वपूर्ण रूप से, मुखपृष्ठ पर लक्षित करने की आवश्यकता है। ऐसा करने का सबसे आसान तरीका लेआउट-रैपर "div" में एक वर्ग जोड़ना होगा जो पूरे लेआउट को लपेटता है। मैं Document.cshtml फ़ाइल को ओवरराइड करके "बॉडी" तत्व में एक वर्ग जोड़ सकता हूं, लेकिन मुझे सच में लगता है कि यह लेआउट.एचएसटीएमएल फ़ाइल के अंदर काम करने के लिए क्लीनर है और मॉडल पर कैपिटल बन गया है। क्लास को आवश्यक सीएसएस कक्षाओं को जोड़ने के लिए "खोलना" टैग।वर्तमान पृष्ठ और/या मुखपृष्ठ
मैं वर्तमान में कुछ इस तरह कर रही है ':
string area = Model.DesignatedAreaField;
Model.Classes.Add(string.IsNullOrWhiteSpace(area) ? "home" : area);
Model.Id = "layout-wrapper";
var tag = Tag(Model, "div"); // using Tag so the layout div gets the classes, id and other attributes added to the Model
मुझे पता है कि क्षेत्र में कटौती नहीं करेगा, क्योंकि होमपेज, और अन्य पृष्ठों को एक ही क्षेत्र में सभी कर रहे हैं, और Model.DesignatedAreaField वास्तव में एक खाली रिटर्न होमपेज या अन्य पृष्ठों के लिए स्ट्रिंग। तो, अंत में, कोड ऊपर हमेशा निम्न मार्कअप उत्पन्न होगा (मैं मुखपृष्ठ पर 3 tripels दिखा रहा हूँ):
<div class="home tripel-123" id="layout-wrapper">
मैं केवल "घर" CSS वर्ग जोड़ने में सक्षम होना चाहते हैं जब मुखपृष्ठ प्रदर्शित किया जा रहा है।
string wrapperCss = IsHomepage ? 'home' : Model.GetUrlPathOrSomethingUniqueForThePath();
Model.Classes.Add(wrapperCss);
यह मेरे लिए, उदाहरण के लिए, मुख्य सामग्री हटना और सही करने के लिए तैरने लगते हैं, और इसके लिए छोड़ दिया पर tripels डाल (जो बनाने के लिए अनुमति देगा कैसे घर पृष्ठ डिजाइन: कुछ छद्म कोड का पालन किया जाएगा ऐसा दिखना चाहिए, लेकिन अगर मैं सरल, लक्षित सीएसएस के साथ ऐसा कर सकता हूं तो मैं घर के लिए एक अलग अलग लेआउट नहीं लिखना चाहता हूं)।
अद्यतन: तारों अप बर्ट्रेंड के जवाब
बर्ट्रेंड के जवाब मुझे यूआरएल के आधार पर रैपिंग div करने के लिए एक वर्ग को जोड़ने के लिए अनुमति दी। उन्होंने कहा कि यह जिक्र नहीं किया था (के बाद से ऑर्चर्ड उसे दूसरा स्वरूप है :-) लेकिन आप Layout.cshtml फ़ाइल में एक जोड़ने के शामिल करने के लिए है और बदल देंगे "मेरा" तदनुसार कोड:
@using Orchard.Utility.Extensions;
{
/* omitted for brevity, everything in between is the same as in the Theme's Machine layout file */
string area = WorkContext.HttpContext.Request.Path.HtmlClassify();
area = string.IsNullOrWhiteSpace(area) ? "home" : area;
Model.Classes.Add("url-" + area);
यह परिणाम
1) होमपेज पर दिखाया जाता है जब:
<div class="url-orchard-local- tripel-123" id="layout-wrapper">
2) जब एक पृष्ठ नामित उत्पाद दिखाए जाएँ:
<div class="url-orchard-local-products" id="layout-wrapper">
निम्नलिखित वर्ग संलग्नित div में जोड़ा जा रहा
मेरे यूआरएल मेरी देव मशीन पर इस तरह पढ़ता है, दृश्य स्टूडियो के वेबसर्वर के अंदर चल रहा है:
http://localhost:30320/OrchardLocal/ or
http://localhost:30320/OrchardLocal/Products
मैं अपने जीवन दांव लगा नहीं कर रहा हूँ, लेकिन मैं दृढ़ विश्वास है कि "OrchardLocal" भाग इसे एक बार उत्पादन में बदल जाएगा प्रकाशित है, मुझे कहना है, Azure सर्वर के लिए ...इसलिए मैं preemptivelly इस के लिए कोड बदलने की है:
string area = WorkContext.HttpContext.Request.Path.HtmlClassify();
if (area.LastOrDefault() == '-') {
area = "home";
}
Model.Classes.Add("url-" + area);
कौन इस वर्ग में यह परिणाम है जब "मुखपृष्ठ" दिखाया जाता है:
<div class="url-home tripel-123" id="layout-wrapper">
(असल में मैं एक एक- ऊपर कोड बनाया है लैम्बर ऑपरेटर के साथ मिश्रित कुछ टर्नरी का दुरुपयोग करने वाला लाइनर :-)
मैं कह रहा हूं कि एचटीएमएल क्लासिफाइटी केवल "वर्ग" के साथ समाप्त होने वाली "कक्षा" को वापस कर देगी जब यह मुखपृष्ठ है ... या "रूट" साइट के लिए ... मैं गलत हो सकता है! :-)
(वैसे भी मैं ऑर्चर्ड कुछ भी मैं nHibernate के अलावा अन्य पिछले कुछ वर्षों से में उपयोग किया है और अधिक से अधिक प्यार कर रहा हूँ, लेकिन, हे, ऑर्चर्ड यह बहुत का उपयोग करता है! बिल्कुल सही!)
मैंने पहली पंक्ति स्ट्रिंग क्षेत्र = वर्ककॉन्टेक्स्ट.एचटीपीकॉन्टेक्स्ट.रूक्वेस्ट.पैथ सब्स्ट्रिंग (1) में बदल दी है। HTML क्लासिफ़ाई(); लगता है कि इसमें इनटाइटल स्लैश शामिल हो सकता है, इसलिए यूआरएल – George