Umbraco/示例和文章/XSLT/擴充套件 Xsl
外觀
最初來自http://www.umbraco.org/frontpage/documentation/articles/sampleofthemonth.aspx
在使用 xsl 開發時,該語言有時會顯得不足,或者難以實現其他程式語言輕鬆完成的任務,而且耗時。
在 umbraco 郵件列表中回答一個問題時,發現使用您最喜歡的程式語言的內聯程式碼擴充套件 xsl 並不是常識,但實際上非常容易做到。
使用內聯伺服器解釋的 Javascript 的示例。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxml="urn:schemas-microsoft-com:xslt"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:math="http://exslt.org/math"
xmlns:umbraco.library="urn:umbraco.library"
exclude-result-prefixes="msxml math umbraco.library">
<xsl:output method="html"/>
<xsl:param
name="currentPage"/>
<msxsl:script
language="JavaScript"
implements-prefix="math">
<![CDATA[
function random(){
return Math.random();
}
]]>
</msxsl:script>
<xsl:template match="/">
<xsl:variable
name="nodeset"
select="$currentPage/node"/>
<xsl:value-of
select="$nodeset[floor(math:random() * (last() -1)) + 1]"/>
</xsl:template>
</xsl:stylesheet>
以上示例展示瞭如何從節點集中獲取隨機節點,使用包裝器來包裝 Javascript 中的 "Math.random()" 函式,以生成隨機種子。
Javascript 在伺服器端執行 - 實際上任何定義的函式都會被編譯為 MSIL(包裝在類定義中),因此對總體效能的影響很小 - 其他場景可能會導致效能開銷,但是 - 在即將釋出的 Umbraco v. 2.1 中 - 可以快取宏的輸出,因此應該可以保持高效能,同時在開發中保持靈活性。
您可以使用不同的程式語言,可以在http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconXSLTStylesheetScriptingUsingMsxslscript.asp找到完整的列表和更多資訊。
作者:Kasper Bumbech Andersen