我正在尝试循环使用sitecore模板而不是项目

时间:2011-05-24 16:05:16

标签: xslt xpath sitecore

好吧这是我的xslt用于循环遍历主项目的项目,但我希望能够循环遍历模板...原因是我的xslt可以更具体而不是显示家居项下的一切

<xsl:template match="*" mode="main">
  <div id="aside">
    <ul id="nav">
      <xsl:for-each select="$home/descendant-or-self::item[position() &lt;= 6]">

        <li>
          <sc:link>
            <sc:text field="Title"></sc:text>
          </sc:link>
        </li>
      </xsl:for-each>
    </ul>

  <div class="advertisement">
    <sc:image field="Image"></sc:image>
  </div>
  </div>
</xsl:template>

1 个答案:

答案 0 :(得分:3)

从您的xslt看来,您似乎在谈论导航。我将创建一个只有一个名为ShowInNavigation的字段的特定导航模板,而不是循环遍历不同的模板。 然后所有其他模板将继承此模板,导航xslt将变得更简单

<xsl:template match="*" mode="main">
  <div id="aside">
    <ul id="nav">
      <xsl:for-each select="$home/descendant-or-self::item[sc:fld('ShowInNavigation') = '1']">

        <li>
          <sc:link>
            <sc:text field="Title"></sc:text>
          </sc:link>
        </li>
      </xsl:for-each>
    </ul>

  <div class="advertisement">
    <sc:image field="Image"></sc:image>
  </div>
  </div>
</xsl:template>

此外,请勿在导航中使用 descendant-or-self :: item ,因为随着网站的增长,导航将成为您的瓶颈。 最好使用 $ home / item [sc:fld('ShowInNavigation')='1'] ,然后对上面的主节点进行硬编码。所以xslt将成为:

<xsl:template match="*" mode="main">
  <div id="aside">
    <ul id="nav">
        <li>
          <sc:link select="$home">
            <sc:text field="Title"></sc:text>
          </sc:link>
        </li>
      <xsl:for-each select="$home/item[sc:fld('ShowInNavigation') = '1']">

        <li>
          <sc:link>
            <sc:text field="Title"></sc:text>
          </sc:link>
        </li>
      </xsl:for-each>
    </ul>

  <div class="advertisement">
    <sc:image field="Image"></sc:image>
  </div>
  </div>
</xsl:template>