1

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

如下图所示,我需要从 /Content/Frontpage Tabs/Featured Pages 节点中引用 /Content/Personal Site/Blog 节点下的所有子页面。

站点层次结构的屏幕截图

如果我将它放在“个人站点”节点下方的页面上,我为这项工作借用的 XSLT 工作正常,但从“首页选项卡”下方没有任何结果。我猜是因为 currentPage 正在遍历那棵树而不是 Personal Site 的树。

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 不够精通,所以非常感谢任何帮助。

4

2 回答 2

2

您应该在宏中创建一个 contentpicker 类型参数(例如,名为“source”),并使用此参数的值作为容器节点的 ID,而不是 currentPage。我经常使用这个技巧,它运行良好,并且允许您更改管理后台中的节点。

于 2012-09-07T12:36:49.113 回答
1

您应该创建一个新变量,该变量将是节点“个人站点”,然后获取所有子节点。为了创建此节点,您可以在 web.config 中使用密钥添加其 ID。

于 2012-08-21T10:17:10.543 回答