2012年8月23日 星期四

xsl 副程式分享, 產生N個符號或圖片

這次要實作一個功能, 畫面如下:

要做出小星星, 每家旅館的星星數都不同, 第1個想到的之前做的副程式:
http://maxtellyou.blogspot.tw/2012/07/xsl-ntab.html

實際套用後發現, xsl 的變數內容(variable) 似乎沒有辦法直接使用 tag 在裡面, 所以多增加了一個副程式 outputSymbolsImage 專門來輸出圖片.


呼叫的 xsl 範例如下:
<xsl:call-template name="outputSymbolsImage">
    <xsl:with-param name="maxNum"><xsl:value-of select="$hotel_star"/></xsl:with-param>
    <xsl:with-param name="symbol"><xsl:value-of select="$hotel_icon"/></xsl:with-param>
    <xsl:with-param name="symbolAlt"><xsl:value-of select="$hotel_star"/></xsl:with-param>
</xsl:call-template>


xsl 副程式如下:
<xsl:template name="outputSymbols">
    <xsl:param name="currentNum">1</xsl:param>
    <xsl:param name="symbol"><![CDATA[*]]></xsl:param>
    <xsl:param name="maxNum"/>
<xsl:if test="$maxNum!=''"><xsl:if test="$currentNum &lt;= $maxNum"><xsl:value-of select="$symbol" /></xsl:if><xsl:if test="$currentNum &lt; $maxNum"><xsl:call-template name="outputSymbols">
        <xsl:with-param name="currentNum"><xsl:value-of select="$currentNum + 1" /></xsl:with-param>
        <xsl:with-param name="symbol"><xsl:value-of select="$symbol" /></xsl:with-param>
        <xsl:with-param name="maxNum"><xsl:value-of select="$maxNum" /></xsl:with-param>
</xsl:call-template></xsl:if></xsl:if>
</xsl:template>

<xsl:template name="outputSymbolsImage">
    <xsl:param name="currentNum">1</xsl:param>
    <xsl:param name="symbol"><![CDATA[*]]></xsl:param>
    <xsl:param name="symbolAlt"><![CDATA[icon]]></xsl:param>
    <xsl:param name="maxNum"/>
<xsl:if test="$maxNum!=''"><xsl:if test="$currentNum &lt;= $maxNum"><img><xsl:attribute name="src"><xsl:value-of select="$symbol" /></xsl:attribute></img></xsl:if><xsl:if test="$currentNum &lt; $maxNum"><xsl:call-template name="outputSymbolsImage">
        <xsl:with-param name="currentNum"><xsl:value-of select="$currentNum + 1" /></xsl:with-param>
        <xsl:with-param name="symbol"><xsl:value-of select="$symbol" /></xsl:with-param>
        <xsl:with-param name="symbolAlt"><xsl:value-of select="$symbolAlt" /></xsl:with-param>
        <xsl:with-param name="maxNum"><xsl:value-of select="$maxNum" /></xsl:with-param>
</xsl:call-template></xsl:if></xsl:if>
</xsl:template>

沒有留言:

張貼留言

Facebook 留言板