Что возвращает функция расширения sitecore GetItemsOfType ()? - PullRequest
2 голосов
/ 28 июля 2011

Поскольку я обеспокоен проблемами с производительностью, относящимися к функции IsItemOfType () ( подробнее здесь ), я пытаюсь переписать ее, используя 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 Ответ

3 голосов
/ 10 августа 2011

Кажется, что 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);
    }
...