2015-04-23 10 views
5

का उपयोग करते हुए मैं साइटकोर 7.5 और साइटकोर 8 (एक ही आवश्यकता के साथ 2 अलग-अलग परियोजनाओं) का उपयोग कर रहा हूं। हमारे पास बाल्टी में संग्रहीत सामग्री आइटम हैं, लेकिन वे पृष्ठ आइटम स्वयं नहीं हैं (उनके पास कोई प्रस्तुति नहीं है, वे केवल डेटा आइटम हैं और आइटम बाल्टी समेत विभिन्न स्रोतों से आ सकते हैं)। पेज हम जैसे /sitecore/सामग्री/घर/समाचार कुछ होगा के साथ आइटम हम आइटम के बाद pathinfo पार्स करने के लिए सक्षम होना चाहिए को रखना चाहते हैं :साइटकोर एमवीसी कस्टम रूट अभी भी साइटकोर प्रतिपादन पाइपलाइन

तो यहाँ समस्या का एक सामान्य लेआउट है नियंत्रक प्रतिपादन के लिए डेटा पेलोड के रूप में नाम।

तो, क्या मैं अब तक इन पंक्तियों के साथ एक कस्टम मार्ग बनाने शामिल की कोशिश की है: पहले से और बाद के नाम से जाना

  routes.MapRoute(
      "Blog", 
      "blog/{*pathInfo}", 
      new 
      { 
       scItemPath = "/sitecore/content/Home/Blog", 
       controller = "Blog", 
       action = "DefaultAction" 
      }); 

मैं RenderCustomRoutes पाइपलाइन से मार्गों लोड, और मैं इस कॉन्फ़िगर किया है विभिन्न परीक्षण प्रयासों में साइटकोर प्रारंभिक मार्ग पाइपलाइन।

मैंने इसे http://www.sitecore.net/learn/blogs/technical-blogs/john-west-sitecore-blog/posts/2012/10/using-sitecore-keys-in-mvc-routes-with-the-sitecore-aspnet-cms.aspx और कुछ संबंधित लेखों से संदर्भित किया।

वहां से कई अतिरिक्त लेखों के बाद जहां वह अपने निर्देशों को संशोधित करता है या अन्य समस्याओं का समाधान करने के लिए चला जाता है, मेरे परिदृश्य को हल नहीं करता है। बात यह है कि इनमें से कोई भी काम नहीं करता है। इस मामले में नियंत्रक को सही ढंग से बुलाया जाता है, लेकिन जब मैं आइटम को प्रतिपादन संदर्भ में प्राप्त करता हूं तो मुझे शेष पृष्ठ के किसी भी प्रस्तुतिकरण को प्राप्त नहीं होता है। क्या यहां से प्रतिपादन पाइपलाइन लॉन्च करने का कोई तरीका है, या ब्लॉग आइटम के शेष प्रस्तुति विवरण का उपयोग करके पृष्ठ को इकट्ठा करने और इसे मैन्युअल रूप से करने का कोई तरीका है?

अन्य मार्ग मैं कोशिश की है सिर्फ मौजूदा ब्लॉग पेज यूआरएल को डेटा के रूप में pathinfo पारित करने के लिए कोशिश कर रहा था, लेकिन मैं एक 404.

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

अतिरिक्त चीजें मैं पर विचार किया गया है: जॉन पश्चिम का कहना है वहाँ Sitecore के लिए 4 तरीके एक MVC अनुरोध

1. अनुरोध पर ध्यान न दें संभालने के लिए कर रहे हैं: ASP.NET MVC के रूप में अगर यह प्रबंधित करने दें साइटकोर संदर्भ स्थापित किए बिना साइटकोर स्थापित नहीं किया गया था।

2. एक मार्ग लागू करें: एमवीसी मार्ग द्वारा निर्दिष्ट नियंत्रक और क्रिया का उपयोग करें।

3. नामित कार्रवाई लागू करें: संदर्भ आइटम में निर्दिष्ट नियंत्रक और क्रिया का उपयोग करें।

4. एक दृश्य लागू करें: साइटकोर के डिफ़ॉल्ट नियंत्रक और संदर्भ आइटम में संदर्भ डिवाइस के लिए लेआउट विवरण में परिभाषित दृश्य को आमंत्रित करने के लिए कार्रवाई का उपयोग करें।

मैं जब मैं का उपयोग कस्टम मार्ग फिट करने के लिए # 2 लगता है क्या मिलता है, लेकिन कुछ, जबकि अभी भी कस्टम मार्ग का उपयोग कर अधिक की तरह # 3 या # 4 है कि मैं क्या जरूरत है।

मैं अपने लेआउट की एक प्रतिलिपि बनाने, दृश्य प्रस्तुत करना और @Html.Sitecore().Rendering("<id>", <datasource>) का उपयोग मैन्युअल शेष पृष्ठ रेंडर करने के लिए:

उत्तर

3

चूंकि आपकी बाल्टी में मौजूद वस्तुओं में कोई प्रेजेंटेशन नहीं है, मुझे विश्वास है कि यह मार्गों के साथ इसे संभालने में मुश्किल होगी। यह संभव हो सकता है और उम्मीद है कि कोई और इसमें चलेगा लेकिन ...

आप जो कोशिश कर रहे हैं उसे प्राप्त करने के लिए आप wildcard Items का उपयोग कर सकते हैं। यह आपके घटकों के सटीक सेटअप और संरचना पर निर्भर करेगा, लेकिन /sitecore/content/Home/Blog के बच्चे के रूप में * नामक एक आइटम बनाएं। फिर आप इस वाइल्डकार्ड आइटम पर प्रस्तुति विवरण आदि सेट कर सकते हैं।

अब किसी भी यूआरएल इस आइटम की भरपाई कर देंगे। आपको किसी बिंदु पर आइटम को हल करने की आवश्यकता है, यह नियंत्रक में ही हो सकता है, आपको URL को पार्स करने की आवश्यकता होगी और फिर अपने प्रतिपादन में उपयोग के लिए आइटम को देखना होगा। नोट कि Context.Item अभी भी वाइल्डकार्ड * आइटम है, इसलिए आप फिर अपने मॉडल को पॉप्युलेट कोड में एक नया चर बनाने के लिए होगा:

Item requestedItem = Sitecore.Context.Database.GetItem("resolved-path"); 
Model.Name = requestedItem.Name; 
Model.MyProperty = requestedItem["My Property"]; 

हालांकि, यह शायद करने के बाद आइटम को हल करने बेहतर होगा ItemResolver पाइपलाइन और उसके बाद की दुकान Sitecore.Context.Items शब्दकोश में guid:

Item requestedItem = Sitecore.Context.Database.GetItem("resolved-path"); 
Sitecore.Context.Items["wildcard-guid"] = requestedItem.ID.ToString(); 

इस तरह से आप कई घटकों में इस का उपयोग करें और घटकों के लिए डेटा स्रोत के रूप में सेट (कोड से) कर सकते हैं, जैसे ब्रेडक्रंब, मुख्य सामग्री इत्यादि। यह कैशिंग परिप्रेक्ष्य से भी फायदेमंद हो सकता है क्योंकि आप VaryByData विकल्प का उपयोग कर कैशिंग सक्षम कर सकते हैं। यदि आवश्यक हो तो Sitecore.Context.Item = null सेट करके आइटम नहीं मिला है तो आप उचित 404 भी फेंक सकते हैं।

आपको लिंक पीढ़ी को संभालने में भी सक्षम होना चाहिए, इसलिए आपको कुछ अनुकूल यूआरएल उत्पन्न करने के लिए create acustom LinkProvider की आवश्यकता होगी।

आशा है कि कुछ समझ में आता है! मुझे जल्द ही कुछ करना है और यह अब तक का सबसे अच्छा विकल्प है ...

+0

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

+0

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

+0

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

3

तो, एक ही जवाब है कि मैं पाया है कि मैं पूरी तरह से खुश नहीं हूँ यह है । यह काम करेगा, लेकिन यह उतना ही सुरुचिपूर्ण नहीं है जितना मैं देखना चाहता हूं, इसलिए मैं अभी भी एक बेहतर समाधान के लिए खुला हूं।

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