2

個人用のUmbracoサイトがあり、ブログとしても使用したいと思っています。

XSLTをまとめて、ブログツリー(ノードID = 1063)のノードから上位3つの投稿を取得し、フロントページに組み込まれているタブページに表示しようとしています。

次の画像は、ノード階層を示しています。

Umbracoサイトノード

XSLTの評価が非常に限られているため、「ブログ」IDのノードIDを取得して、その下の3ページを取得して、「フロントページタブ」の下にあるサイトの「トップ投稿」部分に表示することができません。 "ノード。私が見つけたすべての例は、「現在のページ」で動作します。これは通常、最上位のノードである「個人サイト」です。

これをどのように達成する必要がありますか?

編集

レンダリングされた出力は、公開されたページでは実際には空白ですが(サイト全体を再公開した後でも)、バックオフィスのリッチテキストエディターに表示される[トップ投稿]タブのコンテンツのプレビューは正しく表示されます。

私が使用している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を取得したら、この投稿を再度更新します(それが役立つ場合)。問題は、公開されたページとバックエンドの間の切断であるため、実際のデータではありません。

4

1 に答える 1

1

私はこれをテストしていません(私はあなたのデータを持っていません)が、position()メソッドを使用して、設定された反復回数の後に処理を停止します(ここにいくつかの良いxsltの例があります)。

<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>
  }
}
于 2012-09-25T10:29:52.577 に答える