如何从单独的Umbraco节点获取子文档?

时间:2012-08-21 09:55:25

标签: xslt umbraco

我的Umbraco网站上有一个内容元素,我想将其用作文档树另一部分内容的容器。

如下图所示,我需要在/ Content / Frontpage标签/精选页面节点中引用/ Content / Personal Site / Blog节点下的所有子页面。

Screen capture of site hierarchy

我借用的XSLT工作正常,如果我把它放在“个人网站”节点下面的页面上,但是从“Frontpage Tabs”下面没有产生任何结果。我猜是因为currentPage遍历那棵树而不是个人站点。

XSLT看起来像这样:

  <xsl:param name="currentPage"/>
  <xsl:variable name="numberOfPosts" select="3"/>
  <xsl:variable name="level" select="1"/>

  <xsl:variable name="pageNumber">
    <xsl:choose>
      <xsl:when test="umbraco.library:RequestQueryString('page') &lt;= 0 or string(umbraco.library:RequestQueryString('page')) = '' or string(umbraco.library:RequestQueryString('page')) = 'NaN'">1</xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="umbraco.library:RequestQueryString('page')"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:variable>

  <xsl:variable name="numberOfRecords" select="3" />

  <xsl:template match="/">

    <xsl:if test="$currentPage [name() = 'umbDateFolder']">
      <h2 class="page-title">
        Monthly Archives: <xsl:value-of select="umbraco.library:FormatDateTime(concat($currentPage/../@nodeName,'-',$currentPage/@nodeName,'-11T10:24:46'),'MMMM yyyy')"/>
      </h2>
    </xsl:if>

    <xsl:for-each select="$currentPage/ancestor-or-self::umbBlog//umbBlogPost">
        <xsl:sort select="./PostDate" order="descending" />

        <xsl:if test="position() &gt; $numberOfPosts * (number($pageNumber)-1) and
        position() &lt;= number($numberOfPosts * (number($pageNumber)-1) +
        $numberOfPosts )">

          <ul>
          <xsl:call-template name="showpost">
            <xsl:with-param name="post" select="."/>
          </xsl:call-template>
          </ul>

        </xsl:if>

     </xsl:for-each>

  </xsl:template>

  <xsl:template name="showpost">
    <xsl:param name="post"/>

    <li>
      <div class="excerpt">
        <a class="header" href="{umbraco.library:NiceUrl($post/@id)}" title="{$post/@nodeName}">
          <xsl:value-of select="$post/@nodeName" />
        </a>
        <xsl:value-of select="$post/bodyText" disable-output-escaping="yes" />
      </div>
      <a class="link-button" href="{umbraco.library:NiceUrl($post/@id)}">Read more</a>
    </li>

我需要改变一些明显的东西,但是我对XSLT并不是很精通,所以非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

您应该在宏中创建一个contentpicker类型参数(例如,命名为&#34; source&#34;),并使用此参数的值作为容器节点的ID而不是currentPage。我经常使用这个技巧,它可以很好地工作,并允许您更改管理后台中的节点。

答案 1 :(得分:1)

您应该创建一个新变量,它将成为节点“个人网站”,然后获取所有子节点。 要创建此节点,可以使用web.config中的键添加其ID。