2012-06-17 53 views
0

這裏是我的情況:一把umbraco:獲取用戶屬性,在XSLT不是成員屬性

  1. 加入Author Picker到默認umbBlogPost(從blog4umbraco包),這讓我獲得了作者的ID在XSLT宏
  2. Author Picker被拉起一把umbraco列表用戶,不是會員
  3. 我想顯示作者的用戶名在XSLT輸出

我嘗試了幾種不同的方式,基於谷歌搜索,似乎都使用Membership API,例如umbraco.libary:GetMemberumbraco.library:GetMemberName,這又不起作用,因爲我正在與umbraco用戶打交道,而不是成員。有似乎不是任何用戶等效的方法,即umbraco.libary:GetUserumbraco.library:GetUserName

有誰知道我可以如何獲得xslt宏中的用戶屬性?我正在使用版本4.7.2。另外,雖然我目前正在使用xslt,但是如果可以使用Razor宏(如果4.7.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> 
1

直接在該XSLT文件流掉(~/App_Data/umbraco.config)的XML以一看,我發現了以下屬性:

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

所以,你應該能夠引用那些在XSLT有以下幾點:

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

如果您需要用戶的其他屬性,您可能需要編寫自己的庫,然後可以通過XSLT文件訪問它。看看文件頂部如何包含umbraco.library

+0

感謝您的回答。我發現了你引用的兩個屬性,但是我的情況稍有不同,因爲我已經爲'Author Picker'類型的文檔添加了一個自定義屬性,以便作者可以指定作者。我想我已經使用Razor宏解決了這個問題,並且在驗證之後作爲答案發布。 – sellmeadog

+0

啊,你在你的問題中提到過。對不起,我讀了這個問題,去喝咖啡,然後回過頭來回答,忘記了那些重要的細節。不幸的是,我不熟悉博客包的其他建議。也許他們已經包含了一個已經等待被包含的庫,或許他們已經在XML的子節點中包含了你需要的信息。無論哪種方式,聽起來像你找到了一種選擇。好一個。 –

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>