说我有一个内容结构,如:Sitecore:如何显示项目第一个孩子的内容?
About Us
Information
Contact Us
Blah
当用户点击关于我们,我怎么可以让它显示信息页面?
这将需要在多个网站部分,所以硬编码链接/重定向将无法正常工作。
如何让页面显示第一个孩子的内容,如果存在?
说我有一个内容结构,如:Sitecore:如何显示项目第一个孩子的内容?
About Us
Information
Contact Us
Blah
当用户点击关于我们,我怎么可以让它显示信息页面?
这将需要在多个网站部分,所以硬编码链接/重定向将无法正常工作。
如何让页面显示第一个孩子的内容,如果存在?
我想如果你描述你正在做的事情,可能会更容易回答。
但是,如果你在“关于我们”页面(即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
但尝试写一些关于你正在尝试做的(即做一个菜单或东西)。
我正在尝试为全站导航和面包屑做到这一点。我已经实现了你的建议,但唯一的问题是如果用户创建一个指向父对象的内部链接,当我想让它显示第一个子对象时,他们仍然可以显示父对象的页面/项目(如果它有孩子)。这有意义吗?任何想法如何防止这种情况发生? – Bevan 2011-03-31 00:37:16
嗯...如果你想要做的是以下几点: 每次有人进入“关于我们”页面,他们都会显示来自第一个孩子的信息(“信息”),那么我实际上只是在“关于我们”页面的模板上做一些子布局,然后重定向到第一个子页面。这样,如果用户以某种方式进入页面,他们总是被重定向到子页面。 这很简单(即编程更容易),并且可以出现故障的实例数量更少。 – Holger 2011-03-31 07:08:15
好的,是的,这是有道理的。我会这样做的。谢谢。 – Bevan 2011-03-31 22:30:40
假设你正在使用XSLT和“关于我们”是上下文项:
<sc:link select="item[1]" />
item
会得到下面的上下文(电流)项目的所有项目,[1]
会选择第一个。
我实际上已经为我们的一个更大的网站实现了这种行为。
一个工作(我的作品)的方式,你也可以做到这一点:
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(项项) ;
你使用xslt还是代码隐藏? – 2011-03-30 08:04:44
我使用的代码隐藏 – Bevan 2011-03-31 00:33:43
啊,我的回答不适用于此。 – 2011-03-31 07:56:37