Sitecore:如何显示第一个孩子的内容?

时间:2011-03-29 04:06:36

标签: sitecore

说我的内容结构如下:

About Us
  Information
  Contact Us
  Blah 

当用户点击“关于我们”时,如何让它显示“信息”页面?

这在多个网站部分是必需的,因此硬编码链接/重定向将无效。

如何让页面显示第一个孩子的内容(如果存在)?

4 个答案:

答案 0 :(得分:4)

我认为如果你描述你想要做的事情可能会更容易回答。

但是如果您在“关于我们”页面上(即Sitecore.Context.Item是“关于我们”项目)。

您可以检查当前项目是否包含以下子项:

if (Sitecore.Context.Item.HasChildren) { /* do something */ }

您可以通过以下方式访问孩子:

Sitecore.Context.Item.Children

这会返回一个ChildList对象,您可以在其上调用GetArray()来获取Item []。

如果你只是盲目地想要第一个项目,我想你可以打电话:

Sitecore.Context.Item.Children.ToArray()[0]; //arrays are zero-based, so the first item is 0 and not 1

但是试着写下你要做的事情(比如制作一个菜单或其他东西)。

答案 1 :(得分:2)

假设您正在使用xslt,并且“关于我们”是上下文项:

<sc:link select="item[1]" />

item将获取上下文(当前)项下方的所有项目,[1]将选择第一项。

答案 2 :(得分:2)

我实际上已经为我们一个更大的网站实施了此行为。

你可以这样做的工作方式(对我而言)是:

if (item.TemplateName.ToLower().ToString() == "main menu item")
{

    if (item.Children.Any())
    {
       url = GetItemUrl(item.Children.First<Item>());
    }
    else
    {
       url = GetItemUrl(item);
    }
}
else
{
     url = GetItemUrl(item);
}

在这种情况下,GetItemUrl用于获取url,但我可以想象你使用LinkManager.GetItemUrl(Item item);

答案 3 :(得分:1)

你可能想在这里添加一些模板检查,但是如何:

if (Sitecore.Context.Item.HasChildren) {
  var children = Sitecore.Context.Item.GetChildren();
  Response.Redirect(LinkManager.GetItemUrl(children[0]))
}

这将查看当前页面是否有子节点,如果有,将重定向到该页面。实际上,我在一家拥有办公地点的律师事务所的网站上这样做。因此,当您转到主要位置页面时,它将按字母顺序重定向到第一个办公室。