这是我的情景:
Author Picker
(来自blog4umbraco包)中添加了umbBlogPost
,这使我可以在XSLT宏中访问作者的ID Author Picker
正在提取umbraco 用户列表,而不是成员我尝试了几种基于Google搜索的不同方法,这些方式似乎都在使用会员资格API,例如umbraco.libary:GetMember
和umbraco.library:GetMemberName
,但是我正在处理umbraco用户,而不是成员。 似乎不是任何用户等效方法,即umbraco.libary:GetUser
或umbraco.library:GetUserName
。
有谁知道如何在xslt宏中获取用户属性?我使用的是4.7.2版本。此外,虽然我目前正在使用xslt,如果可以使用Razor宏(如果在4.7.2中支持?),我也可以看到这种方法。感谢。
答案 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>