2012-08-27 3 views
5

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

हम एक XML फ़ाइल का उपयोग कर रहे हैं जो सर्वर पर प्रकाशित है जिसमें सभी मानक शब्दों, जैसे 'और पढ़ें' के अनुवाद शामिल हैं। यह एक ऐसा पृष्ठ है जिसमें उचित प्रकाशन में स्थानीयकरण किया गया है।

हमारे रेजर टेम्पलेट्स में हम एक सादे समाचार सारांश आइटम के नीचे निम्नलिखित कोड का उपयोग करते हैं जो बदले में पूर्ण आइटम से लिंक होता है।

<a tridion:href="@news.ID" class="more" ><%=DefaultLabels.TranslatedTerm(((HomePage)Page).Location, "read_more")%></a> 

बात सर्वर टैग बस ठीक काम करता है, लेकिन आप देख सकते हैं के रूप में के रूप में

<tridion:ComponentLink runat="server" PageURI="tcm:15-407-64" ComponentURI="tcm:15-1475" TemplateURI="tcm:0-0-0" AddAnchor="false" LinkText="&lt;%= DefaultLabels.TranslatedTerm(((HomePage)Page).Location, &#34;read_more&#34;) %&gt;" LinkAttributes=" class=&#34;more&#34;" TextOnFail="true"/> 

का समाधान हो जाता है, उसी पृष्ठ पर सादा पाठ (वहाँ क्योंकि LinkText पैरामीटर कोई आश्चर्य की बात के रूप में लिखा जाता है लाइव डॉक्स के अनुसार पहली जगह स्ट्रिंग के रूप में घोषित किया गया है)।

अगर मैं

tridion:href 
पहले उदाहरण में

दूर ले, और जैसा कि

href 

यह ठीक काम करता है, कोड एक अनुवाद स्ट्रिंग में निराकरण इसे लिखने और यह भी जुड़ा हुआ है ... घटक की टीसीएम आईडी से ज्यादा कुछ नहीं, इस पर पूर्ण समाचार वस्तु के साथ सही पृष्ठ नहीं है।

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

किसी को भी यह पता है कि इसे कैसे हल किया जाए?

संपादित करें:

क्रिस 'जवाब वास्तव में एक मैं इस विशेष स्थिति में लिए देख रहा था था, लेकिन मुझे लगता है कि मैं बाहर बिंदु चाहिए प्रियंक के समारोह कुछ है कि के रूप में अच्छी तरह के रूप में माना जाना चाहिए है। तो मदद के लिए दोनों धन्यवाद, यह मेरे जीवन को कुछ हद तक आसान बना दिया!

उत्तर

2

मैं लिंक अपने लिंक को हल करने, उत्पादन नहीं बल्कि अपने आप को कुछ इस तरह के लिए उपयोग नहीं कर डिफ़ॉल्ट टेम्पलेट्स सुझाव है:

<tridion:ComponentLink runat="server" PageURI="tcm:15-407-64" 
    ComponentURI="tcm:15-1475" TemplateURI="tcm:0-0-0" 
    AddAnchor="false" LinkAttributes=" class=&#34;more&#34;" 
    TextOnFail="true"> 
     <%=DefaultLabels.TranslatedTerm(((HomePage)Page).Location, &#34;read_more&#34;) %> 
</tridionComponentLink> 

अभी भी बेहतर है आप के बजाय taglib/ServerControl

+0

क्रिस, क्या आप समझा सकते हैं कि मुझे लिंक को हल करने के लिए डिफ़ॉल्ट टेम्पलेट का उपयोग क्यों नहीं करना चाहिए, और इसके बजाय इस वाक्यविन्यास का उपयोग करना चाहिए? और टीसीडीएल आउटपुट के बारे में क्या? धन्यवाद। – MDa

+1

डिफ़ॉल्ट "टीबीबी को हल करें" टीसीएम यूआरआई युक्त सभी लिंक पाता है, और उन्हें टीसीडीएल में परिवर्तित करता है, जिसे बाद में आरईएल, जेएसपी, एएसपी.नेट आदि में परिवर्तित कर दिया जाता है। यह लिंक टेक्स्ट को एक विशेषता में रखकर टीसीडीएल बनाता है (जो आपके लिए आपके एएसपी.NET नियंत्रण द्वारा निष्पादित नहीं किया जा रहा है)।अपना कोड निष्पादित करने के लिए, टैग के मुख्य भाग (एक विशेषता के बजाए) लिंक टेक्स्ट (या आपके मामले में थोड़ा सा कोड) के लिए सबसे आसान बात है। जो कोड मैंने सीधे प्रदान किया है वह घटक घटक सर्वर नियंत्रण का संदर्भ देता है जो कि नियंत्रण में नहीं है, तो नियंत्रण के शरीर से लिंक टेक्स्ट लोड करेगा। –

8

TCDL outputting करने पर विचार हो सकता है मुझे उम्मीद है कि यह रेजर फ़ंक्शन आपको बहुत मदद करेगा। यह घटक लिंक या बाहरी लिंक से लिंक टैग प्रस्तुत करने के लिए बहुत उपयोगी काम है।

@helper RenderLink(
    dynamic link,      // the link to render. Handles components + internal/external links 
    string cssClass = null,    // optional custom CSS class 
    string title = null     // optional link text (default is the title of the component being linked to) 
    ) 
{ 
    if(link == null) 
    { 
      return; 
    } 

    if (title == null) 
    { 
     title = link.title; 
    } 

    string classAttr = string.IsNullOrEmpty(cssClass) ? "" : " class='" + cssClass + "'"; 
    dynamic href; 
    string tridionLink = ""; 
    string targetAttr = ""; 

    if (link.Schema.Title == "External Link") 
    { 
     href = link.link; 
    } 
    else if (link.Schema.Title == "Internal Link") 
    { 
     href = link.link; 
     tridionLink = "tridion:"; 
    } 
    else 
    { 
     href = link; 
     tridionLink = "tridion:"; 
    }  

    if(link.target != null) 
    { 
     targetAttr = link.target == "New window" || link.target == "Popup" ? " target='_blank'" : ""; 
    }  

    <a @(tridionLink)href="@href"@[email protected]>@title</a> 
}