【问题标题】:Traverse Sitecore ancestor items until a template is found遍历 Sitecore 祖先项目,直到找到模板
【发布时间】:2017-03-23 15:32:16
【问题描述】:

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

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

Sitecore.Collections.ChildList childItems;

if (Sitecore.Context.Database.GetItem(this.DataSource) != null)
{
  childItems = Sitecore.Context.Database.GetItem(this.DataSource).GetChildren();
}
else
{
  litOutput.Text += "You need to set a datasource";
  return;
}
// Then iterating
foreach (Item item in childItems){}

但是,我还需要获取位于我网站主根目录的 Sitecore 项目,这些项目代表子布局将使用的其他属性和子项目。

因此,真正定义了我的数据源后,我不仅要遍历其子项以获取新闻数据(这是有效的),然后我还需要遍历主根目录,然后向下访问一个名为 SETTINGS 的文件夹保存此项目的字段。

主根模板称为“微型站点”,所以我真的需要帮助了解如何向上遍历,直到找到该模板名称,然后进入设置以获取这些项目。

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

【问题讨论】:

  • 我认为最好有一个 droplink 或 droptree,您已经在其中指定了设置项的路径。这可以防止您再次执行不同的迭代

标签: sitecore sitecore6


【解决方案1】:
query:./ancestor-or-self::*[@@templatename='Microsite']/*[@@name='Settings']

虽然这可行,但在每个请求上都执行此操作似乎不是很好的编码...

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

【讨论】:

  • 感谢您的快速回复,那么我将如何实现该查询? var settingsItem = Sitecore.Context.Item.Axes.SelectSingleItem("./ancestor-or-self::*[@@templatekey = 'Microsite']/*[@@name='Settings']"); litPanel.Text += settingsItem.Fields["Title"].Value;
  • 我得到 System.NullReferenceException:对象引用未设置为对象的实例。以上。
猜你喜欢
  • 2014-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多