我正在尝试通过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>
    

解决方法

从您的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>
另外,请勿在导航中使用“后代或自身::”项目,因为随着站点的增长,导航将成为您的瓶颈。 最好使用$ home / item [sc:fld(\'ShowInNavigation \')= \'1 \'],然后对上面的home节点进行硬编码。因此,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>