Templates 获取Sitecore模板A或模板B下的所有子项

Templates 获取Sitecore模板A或模板B下的所有子项,templates,sitecore,Templates,Sitecore,是否有一种方法可以针对两个模板下的所有子页面?如中所示,如果模板名称为“A”或模板名称为“B”,则是否获取子级 这就是我所拥有的,它现在只针对一个模板,但我想向其中添加某种类型的or,以便获得另一个模板的子项: Item ContentGroup = CurrentItem.Axes.SelectSingleItem(@"child::*[@@templatename='Section Page']/*[@@templatename='Sub Page Top Level']"); 我

是否有一种方法可以针对两个模板下的所有子页面?如中所示,如果模板名称为“A”或模板名称为“B”,则是否获取子级

这就是我所拥有的,它现在只针对一个模板,但我想向其中添加某种类型的or,以便获得另一个模板的子项:

    Item ContentGroup = CurrentItem.Axes.SelectSingleItem(@"child::*[@@templatename='Section Page']/*[@@templatename='Sub Page Top Level']");

我去获取名为“Sub-Page Top Level”或“Sub-Page Top Level Custom”的模板的所有子项。是否有一种方法可以轻松完成此操作?

您可以使用逻辑运算符,如

/*[@@templatename='Sub Page Top Level' or @@templatename='Sub Page Top Level Custom']

如果您使用的是Linq,则可以使用:

homeItem.Axes.GetDescendants().Where(x =>(x.TemplateID.ToString().Equals(yourId1) || x.TemplateID.ToString().Equals(yourId2));
您还可以使用sitecore XPath Builder评估sitecore查询: 要基于2个模板获取“主项目”下的所有项目,请使用:

/sitecore/content/home//*[@@templateid='{76036F5E-CBCE-46D1-AF0A-4143F9B557AA}' or @@templateid='{075AB719-9D9C-4ED0-9100-545E87D830A0}' ]

我建议您使用templateid而不是templatename。几年前,我做了一些测试,并且使用templateid进行了更快的查询。我知道这篇文章已经有几个月没有发表了

我想首先说我不是Sitecore专家,但既然我不得不面对这个问题,下面是我如何解决这个问题的。我希望确保减少对数据库的调用数量和大小,因为我的解决方案将在Azure中运行

var path = rootItem.Paths.Path;

var query = String.Format("fast:{0}//*[@@templateid='{1}' or @@templateid='{2}']",
            path, CategoryItems.CategoryLandingPageTemplateId, CategoryItems.CategoryPageTemplateId);

var items = GetSitecoreDatabase().SelectItems(query);

如您所见,我使用了快速查询。这适用于直系子代,但也可以修改查询以获得子代。如果您知道您的查询将返回1000个或更少的项,那么这应该可以正常工作。否则,我将使用搜索引擎(Lucene或Solr)访问这些项目。

我不知道他们是否更新了API或其他内容,但
getsubstands
不再需要任何参数。getsubstands加载时间更长。有什么方法可以使用GetChildren方法吗?@gretro您不向GetSubstands传递任何参数,而是使用linq查询。