Unlocking the Mysteries of Data View Web Part XSL Tags – Part 5 – <xsl:param>
- Unlocking the Mysteries of Data View Web Part XSL Tags – Part 1: Overview
- Unlocking the Mysteries of Data View Web Part XSL Tags – Part 2 – <xsl:template>
- Unlocking the Mysteries of Data View Web Part XSL Tags – Part 3 – <xsl:call-template>
- Unlocking the Mysteries of Data View Web Part XSL Tags – Part 4 – <xsl:with-param>
- Unlocking the Mysteries of Data View Web Part XSL Tags – Part 5 – <xsl:param>
- Unlocking the Mysteries of Data View Web Part XSL Tags – Part 6 – <xsl:variable>
- Unlocking the Mysteries of Data View Web Part XSL Tags – Part 7 – <xsl:for-each>
- Unlocking the Mysteries of Data View Web Part XSL Tags – Part 8 – <xsl:sort>
- Unlocking the Mysteries of Data View Web Part XSL Tags – Part 9 – <xsl:if>
- Unlocking the Mysteries of Data View Web Part XSL Tags – Part 10 – <xsl:choose>
- Unlocking the Mysteries of Data View Web Part XSL Tags – Part 11 – <xsl:value-of>
- Unlocking the Mysteries of Data View Web Part XSL Tags – Part 12 – Miscellaneous: Person or Group Columns
- Unlocking the Mysteries of Data View Web Part XSL Tags – Part 13 – Miscellaneous: String Functions
- Unlocking the Mysteries of Data View Web Part XSL Tags – Part 14 – Miscellaneous: ddwrt Namespace Functions
- Unlocking the Mysteries of Data View Web Part XSL Tags – Part 15 – Miscellaneous: Field / Node Functions
- Unlocking the Mysteries of Data View Web Part XSL Tags – Part 16 – <xsl:attribute>
- Unlocking the Mysteries of Data View Web Part XSL Tags – Part 17 – <xsl:comment> and <xsl:text>
- Unlocking the Mysteries of Data View Web Part XSL Tags – Part 18 – Miscellaneous – Some Math / Number Functions
- Unlocking the Mysteries of Data View Web Part XSL Tags – Part 19 – Miscellaneous – More Math / Number Functions
- Unlocking the Mysteries of Data View Web Part XSL Tags – Part 20 – <xsl:import>
- Unlocking the Mysteries of the SharePoint Data View Web Part XSL Tags eBook Now Available
Cross-posted from EndUserSharePoint.com…
<xsl:param>
A value you’ve passed into a template with <xsl:with-param>
. You need to have an <xsl:param>
at the top of the template for each value you expect to be passed into it.
I talked in the last post about passing values into templates using <xsl:with-param>
. Whenever you pass these values, you need to tell the “receiving” template to expect them. You do this by using the <xsl:param>
tag.
If we look at the example XSL again, we can see that there are <xsl:param>
tags used in two places:
- At the top of the XSL, prior to any templates
- At the top of the
dvt_1.body
template
<XSL><xsl:stylesheet xmlns:x="<a href="http://www.w3.org/2001/XMLSchema">http://www.w3.org/2001/XMLSchema</a>" xmlns:d="<a href="http://schemas.microsoft.com/sharepoint/dsp">http://schemas.microsoft.com/sharepoint/dsp</a>" version="1.0" exclude-result-prefixes="xsl msxsl ddwrt" xmlns:ddwrt="<a href="http://schemas.microsoft.com/WebParts/v2/DataView/runtime">http://schemas.microsoft.com/WebParts/v2/DataView/runtime</a>" xmlns:asp="<a href="http://schemas.microsoft.com/ASPNET/20">http://schemas.microsoft.com/ASPNET/20</a>" xmlns:__designer="<a href="http://schemas.microsoft.com/WebParts/v2/DataView/designer">http://schemas.microsoft.com/WebParts/v2/DataView/designer</a>" xmlns:xsl="<a href="http://www.w3.org/1999/XSL/Transform">http://www.w3.org/1999/XSL/Transform</a>" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:ddwrt2="urn:frontpage:internal"> <xsl:output method="html" indent="no"/> <xsl:decimal-format NaN=""/> <xsl:param name="dvt_apos">'</xsl:param> <xsl:variable name="dvt_1_automode">0</xsl:variable> <xsl:template match="/"> <xsl:call-template name="dvt_1"/> </xsl:template> <xsl:template name="dvt_1"> <xsl:variable name="dvt_StyleName">Table</xsl:variable> <xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row"/> <table border="0" width="100%" cellpadding="2" cellspacing="0"> <tr valign="top"> <xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1"> <th width="1%" nowrap="nowrap"></th> </xsl:if> <th nowrap="nowrap">Title</th> </tr> <xsl:call-template name="dvt_1.body"> <xsl:with-param name="Rows" select="$Rows"/> </xsl:call-template> </table> </xsl:template> <xsl:template name="dvt_1.body"> <xsl:param name="Rows"/> <xsl:for-each select="$Rows"> <xsl:call-template name="dvt_1.rowview"/> </xsl:for-each> </xsl:template> <xsl:template name="dvt_1.rowview"> <tr> <xsl:if test="position() mod 2 = 1"> <xsl:attribute name="class">ms-alternating</xsl:attribute> </xsl:if> <xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1"> <td width="1%" nowrap="nowrap"> <span ddwrt:amkeyfield="ID" ddwrt:amkeyvalue="ddwrt:EscapeDelims(string(@ID))" ddwrt:ammode="view"></span> </td> </xsl:if> <td> <xsl:value-of select="@Title"/> </td> </tr> </xsl:template> </xsl:stylesheet></XSL>
At the top of the XSL, we see one use of <xsl:param>
. Anything which we declare at this level (outside any individual templates) is available, or scoped, to the entire XSL section.
<xsl:param name="dvt_apos">'</xsl:param>
SharePoint Designer puts this silly little line of code in DVWPs to set up a parameter to represent the apostrophe character. Because of the highly reserved nature of this character, it can be a bear to work with, and this way you have a parameter containing it to use.
We need an <xsl:param>
here for any values we’re declaring in the ParameterBindings
section which we want to use in the XSL, too. So, for instance, if we declare the URL Server Variable in the ParameterBindings
section: <ParameterBinding Name="URL" Location="ServerVariable(URL)" DefaultValue=""/>
, then we need an <xsl:param>
at the top of the XSL if we want to use the value: <xsl:param name="URL">.
In the dvt_1.body
template, we can see:
<xsl:param name="Rows"/>
When the dvt_1.body
template is called, Rows is being passed with <xsl:with-param>
:
<br /> <xsl:call-template name="dvt_1.body"><br /> <xsl:with-param name="Rows" select="$Rows"/><br /> </xsl:call-template><br />
We need the <xsl:param>
tag to “catch” the value that is being thrown in. This “catch” idea is required for anything that we pass into a template. Any parameter which we declare inside a template is available, or scoped, only within that template.
When you want to use a parameter which you’ve “caught”, you precede the name with a dollar sign. (The same is true for <xsl:variable>
, but that’s the next installment.) So in the Rows example above, you’d use the parameter as $Rows
(you’ll see this parameter a lot in the XSL). In the URL example, it’d be $URL
.
Next up: <xsl:variable>
A value you create for use within a template which is only defined within the scope of that template.