0

这是我的场景:

  1. Author Picker在默认值(来自 blog4umbraco 包)中添加了一个,umbBlogPost它使我可以访问 XSLT 宏中的作者 ID
  2. Author Picker正在提取 umbraco用户而不是成员的列表
  3. 我想在 xslt 输出中显示作者的用户名

我已经尝试了几种基于 Google 搜索的不同方法,这些搜索似乎都在使用 Membership API,例如umbraco.libary:GetMemberumbraco.library:GetMemberName这又不起作用,因为我正在与 umbraco 用户打交道,而不是会员。似乎没有任何用户等效的方法,即umbraco.libary:GetUserumbraco.library:GetUserName.

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

4

3 回答 3

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文件顶部的包含方式。

于 2012-06-19T23:28:09.273 回答
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>
于 2014-03-19T11:50:51.813 回答
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>
于 2012-07-20T00:02:08.530 回答