说我的内容结构如下:
About Us
Information
Contact Us
Blah
当用户点击“关于我们”时,如何让它显示“信息”页面?
这在多个网站部分是必需的,因此硬编码链接/重定向将无效。
如何让页面显示第一个孩子的内容(如果存在)?
答案 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]))
}
这将查看当前页面是否有子节点,如果有,将重定向到该页面。实际上,我在一家拥有办公地点的律师事务所的网站上这样做。因此,当您转到主要位置页面时,它将按字母顺序重定向到第一个办公室。