2012-09-24 30 views
2

我有一個Umbraco網站供個人使用,我也想用它作爲博客。如何編碼Umbraco XSLT從無關樹中檢索節點

我試圖放在一起XSLT從博客樹(節點id = 1063)中的節點抓取前三個職位,並將其顯示在合併到首頁的標籤頁上。

下圖說明了該節點層級:

Umbraco site nodes

與我極爲有限的XSLT的升值,我不能搶「博客」的ID的節點ID,並採取以下3頁那要顯示在我的網站「Frontpage Tabs」節點下的「Top Posts」部分。我找到的所有例子都與「當前頁面」有關,後者通常是頂級節點「個人網站」。

我該如何做到這一點?

編輯

,但對於「置頂帖子」選項卡的內容後臺富文本編輯器中顯示預覽(甚至重新發布整個網站後)顯示渲染輸出是出版頁面上實際還是空白正確。

的XSLT我使用這樣的容貌:

<xsl:template match="/"> 
    <ul> 
    <xsl:for-each select="umbraco.library:GetXmlNodeById(1063)/umbBlogPost [@isDoc]"> 
     <li><a href="{umbraco.library:NiceUrl(@id)}"><xsl:value-of select="@nodeName"/></a></li> 
    </xsl:for-each> 
    </ul> 
</xsl:template> 

在標籤的富文本編輯器中顯示的HTML看起來像這樣:

<div umb_macroalias="Dn.BlogListTopThreePosts" ismacro="true" onresizestart="return false;" umbversionid="cb1efb8d-f58c-424b-9c12-df14ac5652d9" umbpageid="1115" title="This is rendered content from macro" class="umbMacroHolder"><!-- startUmbMacro --> 
<ul> 
<li><a href="/blog/test-post.aspx">Test Post</a></li> 
</ul> 
<!-- endUmbMacro --></div> 

我會更新這個帖子我再次已經從數據庫中檢索了XML(如果這很有幫助)。問題不在於實際數據,因爲它是發佈頁面與後端之間的斷開。

+0

,你能否告訴我們輸入XML和XSLT你所期望的輸出?同時顯示您當前在XSLT上的嘗試,並告訴我們它輸出的內容(與期望的輸出相反)。 – LarsH

回答

1

我還沒有測試過這個(我沒有你的數據),但是使用position()方法在一系列迭代後停止處理(some good xslt examples here)。

<xsl:variable name="blogRoot" select="1063"/> 
<xsl:for-each select="umbraco.library:GetXmlNodeById($blogRoot)/umbBlogPost [@isDoc]"> 
    <xsl:if test="position() &lt;= 3"> 
    <li><a href="{umbraco.library:NiceUrl(@id)}"><xsl:value-of select="@nodeName"/></a> 
    </li> 
    </xsl:if> 
</xsl:for-each> 

如果您正在使用剃鬚刀,你可以這樣做:

@using uComponents.Core; 
@using uComponents.Core.uQueryExtensions; 
@{ 
    var topThreeBlogPosts = @uQuery.GetNodesByType(<blog post doc type>).Take(3); 

    foreach(blogItem in topThreeBlogPosts) 
    { 
    <li><a href="@blogItem.NiceUrl">@blogItem.nodeName</a></li> 
    } 
} 
+0

謝謝。這是一個非常好的方法,但實際的內容仍然沒有呈現給頁面。它只在後臺顯示。 –

+0

@ Phil.Wheeler在這種情況下,我猜測前端的問題是權限,無論節點是發佈,刪除,未發佈,過期,隱藏等都不會阻止它們顯示在後端 - 但可能會隱藏他們從前端 – amelvin