有没有办法在两个模板下定位所有子页面?如同,如果模板名称是" A"或者,如果模板名称为" B",请让孩子们?
这就是我所拥有的,它现在只针对一个模板,但我想添加一些或者它,以便我可以获得另一个的子项:
Item ContentGroup = CurrentItem.Axes.SelectSingleItem(@"child::*[@@templatename='Section Page']/*[@@templatename='Sub Page Top Level']");
我去了所有子项目的模板名称"子页面顶层"或者"子页面顶级自定义。"有没有办法在没有太多麻烦的情况下做到这一点?
答案 0 :(得分:5)
您可以使用or
之类的逻辑运算符:
/*[@@templatename='Sub Page Top Level' or @@templatename='Sub Page Top Level Custom']
答案 1 :(得分:3)
如果您使用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
的查询要快得多答案 2 :(得分:0)
我知道这篇文章几个月来一直处于非活动状态。
我首先要说的是我没有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)来获取这些项目。