根据XSLT中的URL更改CSS类

时间:2014-07-16 17:31:37

标签: xml xslt menu

我正在尝试使用XSLT创建一个可以在网站上的所有页面上使用的菜单。

我有一个XSL:

<xsl:template match="header/menu">
  <div class="header__menu">
    <xsl:apply-templates select="item"/> 
  </div>
</xsl:template>

<xsl:template match="menu/item">
  <div class="header__menu-item">
    <a class="link">
        <xsl:attribute name="href">
            <xsl:value-of select="../item/@url"/>
        </xsl:attribute>
        <xsl:value-of select="."/>
     </a>
  </div>
</xsl:template>

XML:

 <header>
    <menu>
      <item url="#">Work</item>
      <item url="#">About</item>
      <item url="#">Blog</item>
    </menu>
 </header>

我想根据页面更改菜单项的CSS类(打开页面时没有链接的活动类)。

我考虑过尝试xsl:选择构建并检查页面网址,但不知道如何做到这一点。

有什么建议吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

虽然可以在XSLT中使用扩展方法来获取URL,但是通过PHP将URL作为参数传递给XSLT可能更容易。请参阅此文档,例如:http://docs.php.net/manual/en/xsltprocessor.setparameter.php

在您的XSLT中,您将拥有一个如此定义的参数

<xsl:param name="url" />

在使用它方面,您可以使用 xsl:choose ,因此您的XSLT可能看起来像这样(在这种情况下,我将css类放在 a 标记,但如果您愿意,它可以轻松地包含 div 标记。

<xsl:template match="menu/item">
  <div class="header__menu-item">
    <a class="link" href="{@url}">
     <xsl:attribute name="class">
        <xsl:choose>
           <xsl:when test="$url = @url">active</xsl:when>
           <xsl:otherwise>inactive</xsl:when>
        <xsl:choose>
      </xsl:attribute>
      <xsl:value-of select="."/>
    </a>
  </div>
</xsl:template>

顺便说一句,请注意使用&#34;属性值模板&#34;在创建现有的 href 属性时。花括号{ }表示要计算的表达式,而不是字面输出。