2012-05-26 7 views
6

मैंने इन सभी श्रेणियों के लिए अलग-अलग पेज बनाए हैं: किताबें, मोबाइल, कॉम्प इत्यादि। अब मैं सभी पृष्ठों में इस प्रकार के नेविगेशन मेनू (जैसा कि चित्र में दिखाया गया है) डालना चाहता हूं और एक पृष्ठ खोलने से संबंधित मेनू लिंक को हाइलाइट करना चाहिए।मैं एसडीएल ट्रिडियन में विभिन्न पृष्ठों के लिए नेविगेशन मेनू कैसे बना सकता हूं?

क्या मुझे एक स्कीमा बनाना चाहिए जिसमें टेक्स्ट और एक लिंक हो और इसे बहुगुणित किया जाए? तो फिर मैं एक घटक बनाते हैं और आखिरकार उन्हें सभी पृष्ठों में प्रस्तुत करता हूं?

यदि नहीं, तो कृपया ऐसा करने के लिए कोई अन्य बेहतर तरीका सुझाएं।

enter image description here

उत्तर

5

आप पेज प्रकार के रूप में ASPX उपयोग करते हैं, नीचे नेविगेशन के लिए अन्य तर्क वर्णित है:

  1. एक नेविगेशन एक्सएमएल बनाएं महत्वपूर्ण पृष्ठों की जानकारी के साथ (सभी पृष्ठों शामिल हैं) (आईडी, पथ, शीर्षक ...)

  2. एसीएक्स नियंत्रण बनाएं जो ब्रेडक्रंब या किसी अन्य नेविगेशन उत्पन्न करेगा। पैरामीटर नियंत्रण वर्तमान पृष्ठ आईडी

  3. बदलें पेज डीडब्ल्यूटी पुनः प्राप्त करना चाहिए

(ascx नियंत्रण रखने) इस तरह से आप प्रतिपादन (प्रकाशन) के समय में कमी पर, नेविगेशन पेज लोड हो रहा है पर प्रदान की जाएगी। दुर्भाग्य से आप इस तरह से पेज लोडिंग समय बढ़ाते हैं। यह आपकी आवश्यकता पर निर्भर करता है जो आपके लिए अधिक उपयुक्त समाधान है। ताज़ा नेविगेशन एक्सएमएल इस दृष्टिकोण की समस्या में से एक है ....

9

सबसे आम तरीका Tridion में किसी भी नेविगेशन उत्पन्न करने के लिए बस एक सी # पर संरचना समूह और पेज आधारित टेम्प्लेट में उत्पन्न करने के लिए है।

उदाहरण के लिए एक ब्रेडक्रम्ब निशान को आसानी से एक टेम्पलेट के भीतर से उत्पन्न किया जा सकता है (या तो एक सी # टुकड़ा या एक वर्ग ITemplate को लागू करने) कुछ इस तरह से:

var pageDocument = package.GetByType(ContentType.Page).GetAsXmlDocument(); 
var current = new Page(pageDocument.DocumentElement, engine.GetSession()); 
var breadcrumb = page.Title; 
while (current.OrganizationalItem != null) 
{ 
    current = current.OrganizationalItem; 
    breadcrumb = current.Title + " > " + breadcrumb; 
} 
package.PushItem("breadcrumb", 
       package.CreateStringItem(ContentType.Text, breadcrumb)); 

ऊपर टुकड़ा वास्तव में केवल कैसे को दर्शाता है संरचना समूहों के पदानुक्रम ऊपर की ओर नेविगेट करें। आपको प्रत्येक संरचना समूह को एक लिंक के रूप में बनाना होगा, शायद PublishUrl प्रत्येक StructureGroup की संपत्ति को देखकर।

मुझे पता है कि आप एक ब्रेडक्रंब ट्रेल के बारे में नहीं पूछ रहे थे, तो आपका बाएंनाव जैसा दिखता है। लेकिन सभी नेविगेशन तत्वों के लिए दृष्टिकोण समान है: अपने ITemplate में TOM.NET का उपयोग करके प्रासंगिक पेज और संरचना समूह को पार करें और उस से अपना नेविगेशन HTML उत्पन्न करें।

वर्तमान StructureGroup में सभी पृष्ठों की सूची प्राप्त करने के लिए (और मौजूदा एक निशान), मैं कुछ इस तरह उम्मीद थी:

var pageDocument = package.GetByType(ContentType.Page).GetAsXmlDocument(); 
var current = new Page(pageDocument.DocumentElement, engine.GetSession()); 
var sg = (StructureGroup) page.OrganizationalItem; 
string result = "<ul>"; 
foreach (var page in sg.GetItems()) 
{ 
    result += (page.Id != current.Id) ? "<li>" : "<li class='selected'>"; 
    result += page.Title; 
    result += "</li>"; 
} 
result += "</ul>"; 
package.PushItem("siblings", package.CreateHtmlItem(result)); 

कृपया यह भी देखना this great example from Nick where he generates an entire sitemap। यह अंत में आपको क्या चाहिए, इसके करीब है, लेकिन निश्चित रूप से बहुत अधिक कोड है (यहां पुन: उत्पन्न करने के लिए बहुत अधिक)। अल्बर्ट ने his experience with this approach and mentions the alternatives में से कुछ साझा किए।

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