Escenario:
Supongamos que queremos editamos la plantilla de estilos de elementos “ItemStyle.xsl” para poner nuestro estilo personalizado y mostrar la fecha en la que se publicó el contenido, además del título con el enlace, el autor y la descripción.
Para ello no tendríamos más que añadir una nueva plantilla xsl de la siguiente forma.
1: <xsl:template name="YourItemTemplateName" match="Row[@Style=YourItemTemplateName]" mode="itemstyle">
2: <xsl:variable name="SafeLinkUrl">
3: <xsl:call-template name="OuterTemplate.GetSafeLink">
4: <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
5: </xsl:call-template>
6: </xsl:variable>
7: <xsl:variable name="DisplayTitle">
8: <xsl:call-template name="OuterTemplate.GetTitle">
9: <xsl:with-param name="Title" select="@Title"/>
10: <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
11: </xsl:call-template>
12: </xsl:variable>
13: <div class="divCustomItem">
14: <xsl:call-template name="OuterTemplate.CallPresenceStatusIconTemplate"/>
15: <div class="divTitle">
16: <a href="{$SafeLinkUrl}" title="{@LinkToolTip}" class="linkTitle">
17: <xsl:if test="$ItemsHaveStreams = 'True'">
18: <xsl:attribute name="onclick">
19: <xsl:value-of select="@OnClickForWebRendering"/>
20: </xsl:attribute>
21: </xsl:if>
22: <xsl:if test="$ItemsHaveStreams != 'True' and @OpenInNewWindow = 'True'">
23: <xsl:attribute name="onclick">
24: <xsl:value-of disable-output-escaping="yes" select="$OnClickTargetAttribute"/>
25: </xsl:attribute>
26: </xsl:if>
27: <xsl:value-of select="$DisplayTitle"/>
28:
29: </a>
30: </div>
31: <div class="divAdditionalData">
32: por <xsl:value-of select="@Author"/> - <xsl:value-of select="@Created" />
33: </div>
34: <div class="divDescription">
35: <xsl:value-of select="@Description" />
36: </div>
37: </div>
38: </xsl:template>
El resultado obtenido sería el siguiente:
Como se puede apreciar, la fecha se muestra con la hora incluida y… para este caso, no nos va a interesar que salga la hora y que la fecha esté formateada de la siguiente forma "08-02-2012”
Solución:
Para empezar tendremos que importar el espacio de nombres xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime al nodo raíz de nuestra plantilla XSLT, con lo que debería quedar algo así:
<xsl:stylesheet version="1.0" exclude-result-prefixes="x d xsl msxsl cmswrt" xmlns:x="http://www.w3.org/2001/XMLSchema" xmlns:d="http://schemas.microsoft.com/sharepoint/dsp" xmlns:cmswrt="http://schemas.microsoft.com/WebParts/v3/Publishing/runtime" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime">
Una vez hecho esto, sólo nos quedará formatear la fecha de la siguiente forma dd-MM-yyyy. Para ello tenemos que hacer uso de la función FormatDateTime que se encuentra bajo el espacio de nombre que añadimos anteriormente y al que denominamos ddwrt
<xsl:value-of select="ddwrt:FormatDateTime(string(@Created) ,1033 ,'dd-MM-yyyy')" />
Con esto, el código nos quedaría de la siguiente forma.
1: <xsl:template name="YourItemTemplateName" match="Row[@Style=YourItemTemplateName]" mode="itemstyle">
2: <xsl:variable name="SafeLinkUrl">
3: <xsl:call-template name="OuterTemplate.GetSafeLink">
4: <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
5: </xsl:call-template>
6: </xsl:variable>
7: <xsl:variable name="DisplayTitle">
8: <xsl:call-template name="OuterTemplate.GetTitle">
9: <xsl:with-param name="Title" select="@Title"/>
10: <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
11: </xsl:call-template>
12: </xsl:variable>
13: <div class="divCustomItem">
14: <xsl:call-template name="OuterTemplate.CallPresenceStatusIconTemplate"/>
15: <div class="divTitle">
16: <a href="{$SafeLinkUrl}" title="{@LinkToolTip}" class="linkTitle">
17: <xsl:if test="$ItemsHaveStreams = 'True'">
18: <xsl:attribute name="onclick">
19: <xsl:value-of select="@OnClickForWebRendering"/>
20: </xsl:attribute>
21: </xsl:if>
22: <xsl:if test="$ItemsHaveStreams != 'True' and @OpenInNewWindow = 'True'">
23: <xsl:attribute name="onclick">
24: <xsl:value-of disable-output-escaping="yes" select="$OnClickTargetAttribute"/>
25: </xsl:attribute>
26: </xsl:if>
27: <xsl:value-of select="$DisplayTitle"/>
28:
29: </a>
30: </div>
31: <div class="divAdditionalData">
32: por <xsl:value-of select="@Author"/> - <xsl:value-of select="ddwrt:FormatDateTime(string(@Created) ,1033 ,'dd-MM-yyyy')" />
33: </div>
34: <div class="divDescription">
35: <xsl:value-of select="@Description" />
36: </div>
37: </div>
38: </xsl:template>
Finalmente, el resultado sería el deseado:
Escenario En este caso voy a escenificar el artículo en otra experiencia personal. En cuestión, utilizando