2016-03-14 4 views
0

Мой URL, имеющий как hsahtag открыть скрыть и показать, и follwed с помощью отслеживания URL (строка запроса), например, как показано ниже http://pre-live/en-gb/information/help-and-contacts/contact-us#Group?clickpage=information-en--group-travel--index&kmtag=c&ban=||SH|2|CTA1|||||CampID||||L2|||||||хэштегом и строки запроса обмена в URL

Вопрос заключается в #Group не работает должным образом из-за строки запроса, связанной с ней, она будет работать, когда мы поместим хэш-тег.

как этот http://pre-live/en-gb/information/help-and-contacts/contact-us?clickpage=information-en--group-travel--index&kmtag=c&ban=||SH|2|CTA1|||||CampID||||L2|||||||#Group

так может предложить любой из по этому вопросу.

ниже моя часть XSLT

<div class="linkContainer"> 
    <!-- Check if the URL we're tracking is internal (BA) or external, if it is internal it will return true--> 
    <xsl:variable name="trackingURL"> 
     <xsl:apply-templates select="." mode="trackingURL"> 
      <xsl:with-param name="trackURL" select="linkURL" /> 
     </xsl:apply-templates> 
    </xsl:variable> 
    <xsl:variable name="link"> 
    <xsl:value-of select="linkURL"/> 
    </xsl:variable> 
    <xsl:variable name="hash"> 
    <xsl:value-of select="substring-after($link, '#')"/> 
    </xsl:variable> 
    <xsl:variable name="linkURL"> 
    <xsl:if test="contains($link, '#')"> 
    <xsl:value-of select="substring-before($link, '#')"/> 
    </xsl:if> 
    <xsl:if test="not(contains($link, '#'))"> 
    <xsl:value-of select="$link"/> 
    </xsl:if> 
    </xsl:variable> 
     <a href="$PAGE_LINK[{$linkURL}]" title="{$titleTag}"> 
      <xsl:if test="linkOpenStyle = 'newWindow'"> 
       <xsl:attribute name="target">_blank</xsl:attribute> 
      </xsl:if> 
      <xsl:attribute name="class"> 
       <xsl:if test="linkStyle='primary'">ui-priority-primary <xsl:value-of select="$linkStyleVal"/></xsl:if> 
       <xsl:if test="linkStyle='secondary'">ui-priority-secondary <xsl:value-of select="$linkStyleVal"/></xsl:if> 
       <xsl:if test="linkStyle='text'"><xsl:value-of select="$linkStyleVal"/></xsl:if> 
      </xsl:attribute> 
      <!-- Tracking params --> 
     <!-- It uses "self::node()" to apply the template to itself. We use that instead of "." because you can't use predicates on that. The params add the data attributes needed for tracking to work --> 
     <xsl:apply-templates select="self::node()[$tracking = 'yes' and $trackingURL = 'true']" mode="trackingParams"> 
      <xsl:with-param name="click-position"> 
       <xsl:apply-templates mode="buttonType" /> 
      </xsl:with-param> 
     </xsl:apply-templates> 
     <!-- End Tracking --> 
      <xsl:value-of select="linkText" disable-output-escaping="yes" /> 
     </a>    
    </div> 

Теперь я удалил хэштегом из URL, я не знаю, где и как разместить это в HREF значение.

ответ

0

Следует отметить, что вы можете использовать xsl:choose в своем существующем коде, чтобы избежать дублирования теста contains.

<xsl:variable name="linkURL"> 
    <xsl:choose> 
     <xsl:when test="contains($link, '#')"> 
     <xsl:value-of select="substring-before($link, '#')"/> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:value-of select="$link"/> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:variable> 

Сказав это, вы можете достичь того, чего хотите в отдельных заявлениях. Чтобы получить hash, вам нужно получить текст после «#», но вам нужно обслуживать, если он приходит до или после строки запроса. Трюк заключается в том, чтобы добавить фиктивный "?" к ссылке, которую вы используете в выражении.

<xsl:variable name="hash" select="substring-before(substring-after(concat($link, '?'), '#'), '?')" /> 

Вы можете использовать подобный трюк, чтобы получить остальную часть URL-адреса без хеша. У этого есть две части, одна, чтобы получить часть перед хешем, а другая после.

<xsl:variable name="linkURL"> 
    <xsl:value-of select="substring-before(concat($link, '#'), '#')" /> 
    <xsl:value-of select="substring-after($link, concat('#', $hash))" /> 
</xsl:variable> 

В случае отсутствия хэша первый оператор получает весь URL-адрес, а второй оператор ничего не возвращает.

Например, с учетом этого XML-

<links> 
    <link> 
     <linkURL>http://pre-live/en-gb/information/help-and-contacts/contact-us#Group?clickpage=information-en--group-travel--index&amp;kmtag=c&amp;ban=||SH|2|CTA1|||||CampID||||L2|||||||</linkURL>  
    </link> 
    <link> 
     <linkURL>http://pre-live/en-gb/information/help-and-contacts/contact-us?clickpage=information-en--group-travel--index&amp;kmtag=c&amp;ban=||SH|2|CTA1|||||CampID||||L2|||||||#Group</linkURL>  
    </link> 
    <link> 
     <linkURL>http://pre-live/en-gb/information/help-and-contacts/contact-us?clickpage=information-en--group-travel--index&amp;kmtag=c&amp;ban=||SH|2|CTA1|||||CampID||||L2|||||||</linkURL>  
    </link> 
</links> 

Следующая таблица стилей

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="xml" indent="yes" /> 

    <xsl:template match="link"> 
     <xsl:variable name="link" select="linkURL"/> 
     <xsl:variable name="hash" select="substring-before(substring-after(concat($link, '?'), '#'), '?')" /> 
     <xsl:variable name="linkURL"> 
      <xsl:value-of select="substring-before(concat($link, '#'), '#')" /> 
      <xsl:value-of select="substring-after($link, concat('#', $hash))" /> 
     </xsl:variable> 
     <xsl:copy> 
      <linkURL> 
       <xsl:value-of select="$linkURL" /> 
      </linkURL> 
      <hash> 
       <xsl:value-of select="$hash" /> 
      </hash> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

производит этот выход

<link> 
    <linkURL>http://pre-live/en-gb/information/help-and-contacts/contact-us?clickpage=information-en--group-travel--index&amp;kmtag=c&amp;ban=||SH|2|CTA1|||||CampID||||L2|||||||</linkURL> 
    <hash>Group</hash> 
</link> 
<link> 
    <linkURL>http://pre-live/en-gb/information/help-and-contacts/contact-us?clickpage=information-en--group-travel--index&amp;kmtag=c&amp;ban=||SH|2|CTA1|||||CampID||||L2|||||||</linkURL> 
    <hash>Group</hash> 
</link> 
<link> 
    <linkURL>http://pre-live/en-gb/information/help-and-contacts/contact-us?clickpage=information-en--group-travel--index&amp;kmtag=c&amp;ban=||SH|2|CTA1|||||CampID||||L2|||||||</linkURL> 
    <hash/> 
</link> 
Смежные вопросы