我正在尝试使用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:选择构建并检查页面网址,但不知道如何做到这一点。
有什么建议吗?提前谢谢。
答案 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 属性时。花括号{ }
表示要计算的表达式,而不是字面输出。