XSLT是扩展样式表转化语言的简写,可以用来操作XML数据。在umbraco中,通过macro来使用XSLT显示动态内容。原则上,XSLT可以显示所有形式的内容,在实际操作中,XSLT更多的被用来显示导航和列表。接下来,我们通过一个例子来简单的介绍下XSLT macro的使用。
在本系列的第五节,我们介绍了macro的时候,使用了一个SiteMenuNavigation导航栏的例子,该导航栏就是一个简单的XSLT。本文中笔者将详细给出该文件的创建方法。
首先,选中Developer Section,选择XSLT Files文件夹右键点击,选择create,在弹出框中,文件名输入SiteMenuNavigation,模板选择List Sub Pages By Level,选中Create Macro复选框,这样就会创建相应的名为SiteMenuNavigation的macro。看以看到umbraco自动为我们写好了大部分代码,我们只需要做少量的更改就可以使用。在这里我们要显示的是home节点下的子节点,所以变量level改成1,显示的节点名字改为pageTitle,最终代码如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxml="urn:schemas-microsoft-com:xslt"
xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets"
exclude-result-prefixes="msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets ">
<xsl:output method="xml" omit-xml-declaration="yes" />
<xsl:param name="currentPage"/>
<!-- Input the documenttype you want here -->
<xsl:variable name="level" select="1"/>
<xsl:template match="/">
<!-- The fun starts here -->
<ul class="fix">
<xsl:for-each select="$currentPage/ancestor-or-self::* [@level=$level]/* [@isDoc and string(umbracoNaviHide) != '1']">
<li>
<a href="{umbraco.library:NiceUrl(@id)}">
<xsl:value-of select="./pageTitle"/>
</a>
</li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>
接下来,笔者将简单的介绍下这些代码的用途。首先是XML的声明部分,除非你想为XSLT添加自定义的函数,一般情况下这部分是不用改动的,代码块如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxml="urn:schemas-microsoft-com:xslt"
xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets"
exclude-result-prefixes="msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets ">
<xsl:output method="xml" omit-xml-declaration="yes" />
接下来,是一个非常重要的参数声明,该参数保存着和网站相关的所有内容,但主要集中在当前加载的页面,所以命名为currentPage。再往下就是显示模块部分,用来输出要显示的内容。
本节,笔者对xslt做了一个简要的介绍,下一节将详细的介绍下参数currentPage的使用。