umbraco:获取USER属性,而不是XSLT中的成员属性

时间:2012-06-17 16:58:45

标签: xslt umbraco umbraco-blog

这是我的情景:

  1. 在默认Author Picker(来自blog4umbraco包)中添加了umbBlogPost,这使我可以在XSLT宏中访问作者的ID
  2. Author Picker正在提取umbraco 用户列表,而不是成员
  3. 我想在xslt输出中显示作者的用户名
  4. 我尝试了几种基于Google搜索的不同方法,这些方式似乎都在使用会员资格API,例如umbraco.libary:GetMemberumbraco.library:GetMemberName,但是我正在处理umbraco用户,而不是成员。 似乎不是任何用户等效方法,即umbraco.libary:GetUserumbraco.library:GetUserName

    有谁知道如何在xslt宏中获取用户属性?我使用的是4.7.2版本。此外,虽然我目前正在使用xslt,如果可以使用Razor宏(如果在4.7.2中支持?),我也可以看到这种方法。感谢。

3 个答案:

答案 0 :(得分:1)

直接查看XSLT运行的XML(~/App_Data/umbraco.config),我发现了以下属性:

<Site 
     writerID="0" 
     creatorID="0" 
     writerName="John Smith"
     creatorName="John Smith" 
     />

因此,您应该能够使用以下内容在XSLT中引用它们:

<xsl:value-of select="$currentPage/@writerName" />

如果您需要用户的其他属性,您可能需要编写自己的库,然后可以通过XSLT文件访问它们。只需看看umbraco.library如何包含在文件顶部。

答案 1 :(得分:1)

Ucomponents提供XSLT解决方案

<xsl:choose>
  <xsl:when test="$currentPage/bodyAuthor != ''">
    <xsl:value-of select="ucomponents.cms:GetUserName($currentPage/bodyAuthor)"/>
  </xsl:when>
  <xsl:otherwise>
    <xsl:value-of select="$currentPage/@writerName" />
  </xsl:otherwise>
</xsl:choose>

答案 2 :(得分:0)

我最终通过编写Razor宏来解决这个问题。关键是在宏的开头添加@using umbraco.BusinessLogic;。此命名空间提供获取用户数据所需的API,而不是成员数据。

对于任何有兴趣的人,这是我写的宏:

@using umbraco.BusinessLogic;
@inherits umbraco.MacroEngines.DynamicNodeContext


<div>
  <h1>
    From Our Blog
  </h1>
  <ul>
  @foreach(var i in @Model.AncestorOrSelf("umbHomepage").Descendants("umbBlogPost").OrderBy("PostDate desc").Take(5))
  {
    <li>
      <p>
        <a href="@i.NiceUrl" title="@i.Name">@i.Name</a><br />
        by <a href="#">@umbraco.BusinessLogic.User.GetUser(Int32.Parse(i.blogAuthor)).Name</a> on @i.PostDate.ToString("MMM dd, yyyy")
      </p>
    </li>
  }
  </ul>
</div>