2012-05-10 13 views
6

के साथ समृद्ध टेक्स्ट फ़ील्ड में एंकर लिंक बनाना, मैं एक घटक के आरटीएफ क्षेत्र में एंकर बटन का उपयोग करने और अप्रत्याशित व्यवहार प्राप्त करने का प्रयास कर रहा हूं। डिज़ाइन व्यू से क्रोम ब्राउज़र का उपयोग करके, मैं शीर्षक को हाइलाइट/चुनता हूं (यानी <h2>My Heading</h2>) मैं एंकर के रूप में उपयोग करना चाहता हूं, और एंकर बटन दबाकर एंकर नाम (यानी my_place) दर्ज करना चाहता हूं।एसडीएल ट्रिडियन 2011 एसपी 1

यह निम्न कोड में परिणाम है मेरे स्रोत टैब में प्रदर्शित किया जा रहा:

<a name="my_place" id="myplace"/><h2>My Heading</h2> 

इस कारण समस्याओं प्रस्तुत करना है जब स्वयं समापन <a/> टैग की वजह से एक ब्राउज़र में एचटीएमएल प्रदर्शित।

मैं निम्नलिखित तीन एचटीएमएल टुकड़े में से एक HTML स्रोत में डाला जा रहा अपेक्षा की होगी:

<a name="my_place" id="myplace"><h2>My Heading</h2></a> 

या

<h2><a name="my_place" id="myplace">My Heading</a></h2> 

या

<a name="my_place" id="myplace"><a><h2>My Heading</h2> 

किसी और को यह अनुभव किया है ? या जो मैंने अपेक्षित किया है उसे प्राप्त करने के तरीके के बारे में जानें (HTML को मैन्युअल रूप से संपादित किए बिना)। या यह उत्पाद के वर्तमान संस्करण में एक बग है।

उत्तर

6

संलग्न मेरी नमूना XSLT टेम्पलेट है:

<template match="a[(@name) and (count(node()) = 0)]"> 
    <copy> 
     <apply-templates select="@*"/> 
     <xhtml:span xmlns:xhtml="http://www.w3.org/1999/xhtml" class="hidden"> </xhtml:span> 
    </copy> 
</template> 

यह थोड़ा अधिक सख्ती से जरूरत से कहते हैं, लेकिन कुछ अन्य मुद्दों पर सामग्री वितरण तरफ एक्सएमएल हेरफेर के कारण हमारे पास संभालती है।

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

4

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

मेरा सुझाव है कि आप इसे ट्रिडियन को रिपोर्ट करें, और शायद अपने टेम्पलेटिंग या एक्सएसएलटी फ़िल्टर करके इसे चारों ओर काम करें।

+0

मुझे लगता है कि आप सही @Dom कर रहे हैं - मैं अपने XSLT फ़िल्टर को संशोधित किया है जैसा कि आपने अनुशंसित किया है, इस मुद्दे को संभालने के लिए स्कीमा। मैंने नीचे अपना एक्सएसएलटी जोड़ा है ताकि अन्य –

2

यह ट्रिडियन में एक बग है। अपने सीएसएस फ़ाइल के रूप में रूप में अच्छी तरह -

  1. संपादित FormatAreaStyles.css फ़ाइल (Tridion सीएमएस प्रोग्राम फ़ाइलों में पाया): एक काम के आसपास है कि मेरा सुझाव है (और हमारे विशेष स्थापना में लागू कर दिया है) निम्न करने के लिए है वेबसाइट द्वारा इस्तेमाल किया - इस तरह एक वर्ग में शामिल करने के:

.hiddenanchor { width:1px; height: 1px; display: block; text-indent:-50000px; }

  1. अपने सीएसएस फ़ाइल बाहर प्रकाशित करें (नया वर्ग के साथ) इतना है कि यह अपने एंकर ठीक से प्रारूपित कर देंगे।

    एक:

  2. और फिर घटक जहां लंगर बाहर का निर्माण कर रहे हैं, आप करना होगा। अपने घटक में शब्दों का एक शब्द या श्रृंखला टाइप करें (जहां आप लक्ष्य होना चाहते हैं),

    बी। उस पाठ का चयन करें, और एंकर टैग को लागू करें,

    सी। फिर एंकर पर बनाई गई नई कक्षा (.hiddenanchor) को लागू करें।

अंत में, अपने "अदृश्य" लंगर इस प्रकार दिखाई देगा:

<a name="anchorname" id="anchorname" class="hiddenanchor">Anchor Name</a> 

यह एक कच्चे काम के आसपास है - पूरी तरह से स्वीकार किया। लेकिन यह काम करता है। अगली डीओएम ऑब्जेक्ट के करीब तक आप हाइपरलिंक/अंडरलाइन स्टाइल के साथ समाप्त नहीं होते हैं।

सीएसएस के स्पष्टीकरण के रूप में, एंकर को तकनीकी रूप से काम करने और एंकर लिंक द्वारा सुलभ होने के लिए डीओएम में दिखाई देना होगा। तो "प्रदर्शन: कोई नहीं" काम नहीं करेगा। वैकल्पिक रूप से टेक्स्ट-इंडेंट दृष्टिकोण लेने के लिए, आप स्क्रीन को टेक्स्ट से पूर्ण या निश्चित स्थिति भी दे सकते हैं।

+0

देख सकें यह इस मामले में एक कार्य-आसपास हो सकता है, लेकिन आवश्यक रूप से कच्चे नहीं। समृद्ध टेक्स्ट प्रारूप क्षेत्रों में "मर्ज" फ़ील्ड प्रकार की जानकारी (उर्फ डेटा टैग) जोड़ने के लिए त्वरित और उपयोगी वैकल्पिक तकनीक के रूप में +1 करें। 'छुपा कार्यकर्ता 'यहां काम करता है, लेकिन हम प्रेजेंटेशन सर्वर की जो भी ज़रूरत है, उसमें हम व्यापार-अनुकूल नाम" टेम्पलेट "कर सकते हैं। वैकल्पिक रूप से आप कुछ वस्तुओं को दृश्यमान रख सकते हैं, लेकिन आवश्यकतानुसार अलग-अलग स्टाइल कर सकते हैं। –

+1

यह ध्यान देने योग्य हो सकता है कि FormatAreaStyles.css को अपडेट करने के बाद Tridion सर्वर पर COM + या IIS को पुनरारंभ करने की आवश्यकता नहीं है। यद्यपि घटक की प्रारूप टूलबार में नई शैली उपलब्ध कराने के लिए आपको अपने ब्राउज़र कैश को साफ़ करने की आवश्यकता हो सकती है। कृपया यह भी ध्यान दें कि कोई खाली सीएसएस तत्व (उदा। ए।ReadMore {/ ** /}) या तो दिखाई नहीं देगा - उन्हें दिखाने के लिए स्वरूपण सेटिंग्स होना चाहिए। –

6

धन्यवाद क्रिस, मैंने अपनी आवश्यकताओं को पूरा करने के लिए अपना समाधान संपादित किया है, इसलिए भविष्य में इस मुद्दे के साथ किसी के लिए साझा करना चाहता था।

नोट: यह पाठ को एंकर के अंदर ले जाता है और पाठ को बाहर हटा देता है। फिक्स एंकर जो केवल टेक्स्ट रखने के लिए थे, एचटीएमएल नहीं। यानी मेरे समाधान फिक्स इस टैग:

<p><a name="anchor1" id="anchor1"></a>Anchor text</p> 

करने के लिए

<p><a name="anchor1" id="anchor1">Anchor text</a></p> 

लेकिन यह नहीं:

<p><a name="anchor1" id="anchor1"></a><h1>Anchor text</h1></p> 

यहाँ मेरी XSL है। उम्मीद है कि यह आपको आधार देने में मदद करेगा, मुझे यकीन है कि आप निम्न टैग को देखने के लिए इसे आसानी से अपडेट कर सकते हैं (मुझे इसके समाधान के लिए इसकी आवश्यकता नहीं है)।

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes" method="html" cdata-section-elements="script"/> 
    <xsl:template match="/ | node() | @*"> 
     <xsl:copy> 
      <xsl:apply-templates select="node() | @*"/> 
     </xsl:copy> 
    </xsl:template> 

    <!-- fixes Tridion bug when using interface button to insert anchor in rich text field --> 
    <!-- gets all empty anchor tags with an id and takes any following text and copies it inside anchor --> 
    <xsl:template match="a[(@id) and (count(node()) = 0)]"> 
     <xsl:copy> 
      <xsl:for-each select="@*"> 
       <xsl:attribute name="{name(.)}"> 
        <xsl:value-of select="."/>      
       </xsl:attribute> 
      </xsl:for-each> 
      <xsl:value-of select="normalize-space(following-sibling::text())"/> 
     </xsl:copy> 
    </xsl:template> 
    <!-- delete any text after an empty anchor (template above has already copied this text inside the anchor) --> 
    <xsl:template match="text()[preceding-sibling::a[(@id) and (count(node()) = 0)]]" ></xsl:template> 
</xsl:stylesheet> 

यहाँ अपने परीक्षण एक्सएमएल

<?xml version ="1.0"?> 
<?xml-stylesheet type="text/xsl" href="tridionhtmlfield.xsl"?> 
<html> 
    <head></head> 
    <body> 
     <p><a id="anchorlink" name="anchorlink" title="Anchor link" href="#Anchor">Anchor link</a>Some text after</p> 
     <p><a name="broken-with-html-name" id="broken-with-html-id"></a><h1>Anchor - broken with html</h1></p> 
     <p><a name="broken-text-only-name" id="broken-text-only-id"></a>Anchor - broken text only</p> 
     <p><a name="broken-notext-name" id="broken-notext-id"></a></p> 
     <p><a name="correct-name" id="correct-id">Anchor - correctly rendered</a> Some text after</p> 
    </body> 
</html> 

के बाद है परिणत:

<html> 
    <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head> 
    <body> 
     <p><a id="anchorlink" name="anchorlink" title="Anchor link" href="#Anchor">Anchor link</a>Some text after</p> 
     <p><a name="broken-with-html-name" id="broken-with-html-id"></a><h1>Anchor - broken with html</h1></p> 
     <p><a name="broken-text-only-name" id="broken-text-only-id">Anchor - broken text only</a></p> 
     <p><a name="broken-notext-name" id="broken-notext-id"></a></p> 
     <p><a name="correct-name" id="correct-id">Anchor - correctly rendered</a> Some text after</p> 
    </body> 
</html> 

आशा इस मदद करता है

+0

हाय जोनाथन, इससे कुछ ग्लेड ने आपकी मदद की - कृपया हमारे एसडीएल का उपयोग करके हमारे एसडीएल ट्रिडियन एरिया 51 प्रस्ताव को करने पर विचार करें ताकि हम ट्रिडियन के लिए समर्पित क्यू एंड ए क्षेत्र प्राप्त कर सकें: http://area51.stackexchange.com/proposals/38335/tridion? रेफरर = eo63snjNlUWNn9xqeeO2NA2 –

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