Umbraco在xslt中发布日期

时间:2011-06-21 14:15:22

标签: c# sql xslt umbraco

各种 Umbraco references指出Umbraco只在umbraco.config中存储节点createDate和updateDate(当你想编写Umbraco内容的xslt转换时)。

但我需要能够在xslt转换中显示发布日期。

现在经过研究,在Umbraco数据库中,cmsContentVersion.VersionDate是节点发布日期,cmdDocument.updateDate是最后更新的日期,我可以创建一个触发器,每当发布日期发生变化时,都会更改updateDate以匹配发布日期。使用以下xsl:

<xsl:value-of select="umbraco.library:FormatDateTime(@updateDate, 'd MMM yyyy hh:mm')"/>

但理想情况下,我不想更改核心Umbraco表定义。

我发现this reference建议扩展节点文档以在C#中公开发布日期,使用:

public static string ReleaseDate(int nodeId) {
    Document d = new Document(nodeId);
    return d.ReleaseDate.ToString();
}

...但是如何在xslt中翻译C#?将xslt重写为ascx宏不是一种选择。

1 个答案:

答案 0 :(得分:2)

您可以使用XSLT扩展。请参阅本教程(http://www.nibble.be/?p=60),但我已在此处进行了调整。

  1. 将.NET代码放在一个名为Extensions的类中,该类在构建中并复制到umbraco安装的bin文件夹中。例如,我们将它放在MyProject.dll
  2. 打开/config/xsltExtensions.config文件。
  3. 将以下行添加到配置中:

    <ext assembly=”\bin\MyProject” type=”MyProject.Extensions” alias=”MyExtensions”></ext> 
    
  4. 在xslt中,添加对扩展名的引用并排除前缀:

    <xsl:stylesheet 
      version=”1.0″ 
      xmlns:xsl=”http://www.w3.org/1999/XSL/Transform” 
      xmlns:msxml=”urn:schemas-microsoft-com:xslt”
      xmlns:umbraco.library=”urn:umbraco.library”
      xmlns:BlogLibrary=”urn:MyExtensions”
      exclude-result-prefixes=”msxml umbraco.library MyExtensions”>
    
  5. 您现在应该可以像使用任何umbraco.library方法一样使用此方法,例如:

     <xsl:value-of select="MyExtensions:ReleaseDate($myNodeId)" />
    
  6. 希望这有帮助。