Templates 获取Sitecore模板A或模板B下的所有子项
是否有一种方法可以针对两个模板下的所有子页面?如中所示,如果模板名称为“A”或模板名称为“B”,则是否获取子级 这就是我所拥有的,它现在只针对一个模板,但我想向其中添加某种类型的or,以便获得另一个模板的子项: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']"); 我
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查询。