什么GetItemsOfType()sitecore扩展函数返回?

时间:2011-07-28 15:51:06

标签: sitecore xslt-1.0

由于我关注与 IsItemOfType() 功能(read more here)相关的性能问题,我正在尝试使用重写它 GetItemsOfType() 功能。

这是一段代码:

<xsl:variable name="home" select="ancestor-or-self::item[sc:IsItemOfType('_MenuRoot',.)]"></xsl:variable>
<xsl:variable name="home2" select="sc:GetItemsOfType('_MenuRoot', ./ancestor-or-self::item)"></xsl:variable>        
<div>
   <xsl:value-of select="count($home/item)" /> <!-- returns 4 -->
   <br />
      <xsl:value-of select="count($home2/item)" /> <!-- returns 0 ??? --> 
   <br />
</div>

不幸的是 GetItemsOfType() 函数是不是带有子项的项目? 知道为什么吗?

1 个答案:

答案 0 :(得分:3)

似乎GetItemsOfType()只查看从项目的当前模板继承的模板。因此,如果item1是模板t1,并且t1继承自t2,它将只返回item1,如果你询问它是否继承自t2而不是t1。

你可以自己编码。这并不难。你可以这样做:

    public bool InheritsFrom(Item item, ID templateIdToTest)
    {
      Template template = TemplateManager.GetTemplate(item);

      if (template.ID == templateIdToTest)
        return true;

      return template.DescendsFrom(templateIdToTest);
    }