2011-03-29 37 views
1

说我有一个内容结构,如:Sitecore:如何显示项目第一个孩子的内容?

About Us 
    Information 
    Contact Us 
    Blah 

当用户点击关于我们,我怎么可以让它显示信息页面?

这将需要在多个网站部分,所以硬编码链接/重定向将无法正常工作。

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

+0

你使用xslt还是代码隐藏? – 2011-03-30 08:04:44

+0

我使用的代码隐藏 – Bevan 2011-03-31 00:33:43

+0

啊,我的回答不适用于此。 – 2011-03-31 07:56:37

回答

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 

但尝试写一些关于你正在尝试做的(即做一个菜单或东西)。

+0

我正在尝试为全站导航和面包屑做到这一点。我已经实现了你的建议,但唯一的问题是如果用户创建一个指向父对象的内部链接,当我想让它显示第一个子对象时,他们仍然可以显示父对象的页面/项目(如果它有孩子)。这有意义吗?任何想法如何防止这种情况发生? – Bevan 2011-03-31 00:37:16

+1

嗯...如果你想要做的是以下几点: 每次有人进入“关于我们”页面,他们都会显示来自第一个孩子的信息(“信息”),那么我实际上只是在“关于我们”页面的模板上做一些子布局,然后重定向到第一个子页面。这样,如果用户以某种方式进入页面,他们总是被重定向到子页面。 这很简单(即编程更容易),并且可以出现故障的实例数量更少。 – Holger 2011-03-31 07:08:15

+0

好的,是的,这是有道理的。我会这样做的。谢谢。 – Bevan 2011-03-31 22:30:40

2

假设你正在使用XSLT和“关于我们”是上下文项:

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

item会得到下面的上下文(电流)项目的所有项目,[1]会选择第一个。

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(项项) ;

+0

+1,因为item.TemplateName帮助我加载! – Anicho 2012-01-19 14:48:09

+0

干杯Anchicho;)。 – Younes 2012-01-19 15:03:38

相关问题