遍历Sitecore祖先项,直到找到模板

遍历Sitecore祖先项,直到找到模板,sitecore,sitecore6,Sitecore,Sitecore6,我的网站在单个浏览器布局页面占位符上包含许多子布局 我已将我的一个子布局数据源设置为我的内容结构中的一个文件夹,该文件夹包含新闻项,并按如下方式获取其值和子项,以呈现这些新闻项: Sitecore.Collections.ChildList子项; if(Sitecore.Context.Database.GetItem(this.DataSource)!=null) { childItems=Sitecore.Context.Database.GetItem(this.DataSource).G

我的网站在单个浏览器布局页面占位符上包含许多子布局

我已将我的一个子布局数据源设置为我的内容结构中的一个文件夹,该文件夹包含新闻项,并按如下方式获取其值和子项,以呈现这些新闻项:

Sitecore.Collections.ChildList子项;
if(Sitecore.Context.Database.GetItem(this.DataSource)!=null)
{
childItems=Sitecore.Context.Database.GetItem(this.DataSource).GetChildren();
}
其他的
{
litOutput.Text+=“您需要设置一个数据源”;
返回;
}
//然后迭代
foreach(子项中的项){}
但是,我还需要获取位于网站主根目录的Sitecore项目,这些项目表示子布局将使用的其他属性和子项目

因此,在定义了数据源之后,我不仅要向下遍历它的子项以获取新闻数据(这是有效的),然后还需要遍历回主根,然后向下遍历一个名为SETTINGS的文件夹,该文件夹保存该项的字段

主根模板被称为“Microsite”,因此我确实需要帮助,了解如何向上遍历,直到找到模板名称,然后向下进入设置以获取这些项目

希望这是有意义的,任何人都可以帮助解决这个问题

query:./ancestor-or-self::*[@@templatename='Microsite']/*[@@name='Settings']
虽然这是可行的,但似乎并不是很好的编码在每个请求上都这么做

您可能希望使用templateid而不是templatename。。而不是“硬编码”名称“设置”

虽然这是可行的,但似乎并不是很好的编码在每个请求上都这么做


您可能希望使用templateid而不是templatename。。而不是“硬编码”名称“设置”。

我认为最好有一个droplink或droptree,其中您已经指定了设置项的路径。这是为了防止您再次执行不同的迭代。我认为最好使用droplink或droptree,其中您已经指定了设置项的路径。这将防止您再次执行不同的迭代感谢您的快速响应,那么我将如何实现该查询呢?var settingsItem=Sitecore.Context.Item.Axes.SelectSingleItem(“./祖先或自身::*[@@templatekey='Microsite']/*[@@name='Settings']”);litPanel.Text+=settingsItem.Fields[“Title”].Value;我获取System.NullReferenceException:对象引用未设置为对象的实例。感谢您的快速回复,那么我将如何实现该查询?var settingsItem=Sitecore.Context.Item.Axes.SelectSingleItem(“./祖先或自身::*[@@templatekey='Microsite']/*[@@name='Settings']”);litPanel.Text+=settingsItem.Fields[“Title”].Value;我获取System.NullReferenceException:对象引用未设置为对象的实例。有了以上。