使用sitecore查询检索项目

时间:2011-09-14 14:34:34

标签: sitecore sitecore6

3 个答案:

答案 0 :(得分:5)

在查询中使用//将使其递归,而/仅为直接子项。这会对性能产生影响。

/sitecore/content/home//*[@@templatekey='site section'] 

此外,不应该是@@templatename而不是@@templatekey

/sitecore/content/home//*[@@templatename='site section']

答案 1 :(得分:5)

var homeItem = Sitecore.Context.Database.GetItem(Sitecore.Context.Site.StartPath);
var siteSectionItems = new List<Item>();

foreach (Item item in homeItem.Children)
{
    var itemTemplate = TemplateManager.GetTemplate(item);

    if (itemTemplate.InheritsFrom("Site Section"))
        siteSectionItems.Add(item);
}

答案 2 :(得分:0)

我建议你做的是编写逻辑来确定一个项是否实现了一个特定的模板。例如,您可以使用以下代码执行此操作:

    /// <summary>
    /// Determines if the item implements the specified template.
    /// </summary>
    /// <param name="item">The item to check.</param>
    /// <param name="templateName">Name of the template.</param>
    /// <returns>
    /// A boolean indicating weather the item implements the template or not
    /// </returns>
    public static bool DoesItemImplementTemplate(Item item, string templateName)
    {
        if (item == null || item.Template == null)
        {
            return false;
        }

        var items = new List<TemplateItem> { item.Template };
        int index = 0;

        // flatten the template tree during search
        while (index < items.Count)
        {
            // check for match
            TemplateItem template = items[index];
            if (template.Name == templateName)
            {
                return true;
            }

            // add base templates to the list
            items.AddRange(template.BaseTemplates);

            // inspect next template
            index++;
        }

        // nothing found
        return false;
    }

你给它的'item'和它应该继承的模板的'templatename',你将返回一个true / false。例如,你可以得到一个List并通过foreach来过滤掉那些没有继承的项目。

List<Item> completeList = new List<Item>();
completeList = Sitecore.Context.Item.Children().toList<Item>();

List<Item> correctItemList = new List<Item>();

foreach(Item thisItem in completeList) 
{
   if(DoesItemImplementTemplate(thisItem, "myTemplate") 
   {
      if(!correctItemList.Contains(thisItem) 
      {
         correctItemList.Add(thisItem);
      }
   }
}

我希望你能用上述信息做些有用的东西!