none
Форматирование даты и вывод даты ItemStyle.xlt RRS feed

  • Вопрос

  • Доброго времени суток, пытаюсь отредактировать Веб-часть "Запрос содержимого", необходимо добавить созданный столбец "Дата утверждения"

    В веб-части изменил строки:

    <property name="CommonViewFields" type="string">
    _x0414__x0430__x0442__x0430__x0020__x0443__x0442__.....и т.д,DateTime
    </property>
    <property name="DataColumnRenames" type="string">
    _x0414__x0430__x0442__x0430__x0020__x0443__x0442__.....и т.д,DateApprov;
    </property>
    

    Добавил новый стиль в ItemStyle.xlt, назвал его NewDocStyle

    <xsl:variable name="DateApprov"> 
     <xsl:value-of select="@DateApprov" />
    </xsl:variable>
    

    <div class="description">
     Утвержден:
     <xsl:value-of select="$DateApprov" /> 	
    </div>
    
    Все получилось, столбец выводится -
    Утвержден: 2011-07-08 00:00:00

    Но необходимо убрать время, пробовал сделать через FormatDateTime, веб-часть выдает ошибку.

    <xsl:variable name="DateApprov"> 
     <xsl:value-of select="ddwrt:FormatDateTime(string(@DateApprov) ,1049 ,'DD.MM.YYYY')" />
    </xsl:variable> 
    

    Полный код стиля DocNewStyle


    <xsl:template name="NewDocStyle" match="Row[@Style='NewDocStyle']" mode="itemstyle">
    		<xsl:variable name="SafeLinkUrl">
     <xsl:call-template name="OuterTemplate.GetSafeLink">
     <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
     </xsl:call-template>
     </xsl:variable>
    		<xsl:variable name="DisplayTitle">
     <xsl:call-template name="OuterTemplate.GetTitle">
     <xsl:with-param name="Title" select="''"/>
     <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
     <xsl:with-param name="UseFileName" select="1"/>
     </xsl:call-template>
     </xsl:variable>
     <xsl:variable name="DateApprov"> 
     	<xsl:value-of select="ddwrt:FormatDateTime(string(@DateApprov) ,1049 ,'MM')" />
     </xsl:variable> 
    		<div class="item link-item">
    			<xsl:if test="string-length(@DocumentIconImageUrl) != 0">
    				<div class="image-area-left">
    					<img class="image" src="{@DocumentIconImageUrl}" title="" />
    				</div>
    			</xsl:if>
    			<div class="link-item">
    				<xsl:call-template name="OuterTemplate.CallPresenceStatusIconTemplate"/>
    				<a href="{$SafeLinkUrl}" title="{@LinkToolTip}">
    					<xsl:if test="$ItemsHaveStreams = 'True'">
    						<xsl:attribute name="onclick">
     <xsl:value-of select="@OnClickForWebRendering"/>
     </xsl:attribute>
    					</xsl:if>
    					<xsl:if test="$ItemsHaveStreams != 'True' and @OpenInNewWindow = 'True'">
    						<xsl:attribute name="onclick">
     <xsl:value-of disable-output-escaping="yes" select="$OnClickTargetAttribute"/>
     </xsl:attribute>
    					</xsl:if>
    					<xsl:value-of select="$DisplayTitle"/>
    				</a>
    				<div class="description">
    					<xsl:value-of select="@Description" />
    				</div>
    				<div class="description">
     			Утвержден:
     			<xsl:value-of select="$DateApprov" /> 	
     		</div>
    			</div>
    		</div>
    	</xsl:template>
    


    28 июля 2011 г. 5:36

Ответы

  • aland17,

    по вашему вопросу удалось найти решение, как оказалось, ошибка связана с реализацией XSLT DateFormat функции в Sharepoint 2010. Чтобы исправить данный bug придется написать свой xsl template, см. ниже:

    Bug With SharePoint 2010 XSLT DateFormat Function

    XsltListViewWebPart Date Format using DDWRT


    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.
    • Предложено в качестве ответа Roman Zhukov 3 августа 2011 г. 11:02
    • Помечено в качестве ответа Dmitry Davydov 4 августа 2011 г. 9:20
    3 августа 2011 г. 11:02

Все ответы

  • Здравствуйте,

    попробуйте в коде исправить 'DD.MM.YYYY' на 'dd.MM.yyyy':

    <xsl:variable name="DateApprov">

     <xsl:value-of select="ddwrt:FormatDateTime(string(@DateApprov) ,1049 ,'dd.MM.yyyy')" />

    </xsl:variable> 

     


    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.
    2 августа 2011 г. 10:46
  • Я использовал другую функцию: ddwrt:FormatDate(string($created) ,1049 ,1)"

    Но столкнулся с другой проблемой:

    Дата 01.02.2010 16:26, т.е. 1-е февраля 2010г., отображается почему-то как 2 января 2010 г.
    при этом дата 24.11.2009 10:24 - отображается правильно 24 ноября 2009 г.

    вот код:
    <xsl:value-of select="ddwrt:FormatDate(string($created) ,1049 ,1)" /> |
    <xsl:value-of select="$created" /> |
    <xsl:value-of select="ddwrt:FormatDate(string($created) ,1049 , 3)" />
    вот, что на выходе:
    02.01.2010 | 01.02.2010 16:26 | 2 января 2010 г.
    24.11.2009 | 24.11.2009 10:24 | 24 ноября 2009 г.

    Портал русский, поле - системное Created, в БД хранится в поле tp_Created:
    2010-02-01 13:26:24.000
    2009-11-24 07:24:12.000

    2 августа 2011 г. 11:09
  • Странно, а если, например, 1049 заменить на 2057(Английский (Великобритания)) несоответствие остается для ноября и февраля?


    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.
    2 августа 2011 г. 12:33
  • Да, то же самое и с 2057, и с 1033

    :(

     

    3 августа 2011 г. 6:44
  • Скажите, а если попробовать этот вариант  <xsl:value-of select="ddwrt:FormatDateTime(string($created) ,1049 ,'dd.MM.yyyy')" />

    что на выходе будет?


    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.
    3 августа 2011 г. 8:14
  • То же самое:

    ddwrt:FormatDateTime(string($created), 1049 ,'dd.MM.yyyy')
    02.01.2010
    24.11.2009

    ddwrt:FormatDateTime(string($created), 1049 ,'dd MMMM yyyy')
    02 января 2010
    24 ноября 2009

    3 августа 2011 г. 8:25
  • aland17,

    по вашему вопросу удалось найти решение, как оказалось, ошибка связана с реализацией XSLT DateFormat функции в Sharepoint 2010. Чтобы исправить данный bug придется написать свой xsl template, см. ниже:

    Bug With SharePoint 2010 XSLT DateFormat Function

    XsltListViewWebPart Date Format using DDWRT


    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.
    • Предложено в качестве ответа Roman Zhukov 3 августа 2011 г. 11:02
    • Помечено в качестве ответа Dmitry Davydov 4 августа 2011 г. 9:20
    3 августа 2011 г. 11:02
  • Спасибо огромное!

    Будем пробовать.

    Надеюсь, в MS этот баг пофиксят к следующему Cumulative Update :)

    3 августа 2011 г. 14:13