Sitecore:如何显示第一个子项中的内容?
假设我的内容结构如下:Sitecore:如何显示第一个子项中的内容?,sitecore,Sitecore,假设我的内容结构如下: About Us Information Contact Us Blah 当用户单击关于我们的信息时,我如何使其显示信息页面 这在多个站点部分上是必需的,因此硬编码链接/重定向将不起作用 如果存在第一个子页面,如何使页面显示其内容?假设您使用的是xslt,“关于我们”是上下文项: <sc:link select="item[1]" /> item将获取上下文(当前)项下的所有项,[1]将选择第一项。假设您使用的是xslt,“关于我们”是上
About Us
Information
Contact Us
Blah
当用户单击关于我们的信息时,我如何使其显示信息页面
这在多个站点部分上是必需的,因此硬编码链接/重定向将不起作用
如果存在第一个子页面,如何使页面显示其内容?假设您使用的是xslt,“关于我们”是上下文项:
<sc:link select="item[1]" />
item
将获取上下文(当前)项下的所有项,[1]
将选择第一项。假设您使用的是xslt,“关于我们”是上下文项:
<sc:link select="item[1]" />
item
将获取上下文(当前)项下的所有项,[1]
将选择第一项。我认为如果您描述您正在尝试做的事情,回答可能会更容易
但是如果您在“关于我们”页面(即Sitecore.Context.Item是“关于我们”的项目)
您可以检查当前项是否有如下子项:
if (Sitecore.Context.Item.HasChildren) { /* do something */ }
您可以通过以下方式访问子项:
Sitecore.Context.Item.Children
这将返回一个ChildList对象,您可以在该对象上调用GetArray()以获取项[]
如果你只是盲目地想要第一件东西,我想你可以叫:
Sitecore.Context.Item.Children.ToArray()[0]; //arrays are zero-based, so the first item is 0 and not 1
但是试着写一点你想做的事情(比如做菜单什么的)。我想如果你描述一下你想做的事情,回答起来可能会更容易 但是如果您在“关于我们”页面(即Sitecore.Context.Item是“关于我们”的项目) 您可以检查当前项是否有如下子项:
if (Sitecore.Context.Item.HasChildren) { /* do something */ }
您可以通过以下方式访问子项:
Sitecore.Context.Item.Children
这将返回一个ChildList对象,您可以在该对象上调用GetArray()以获取项[]
如果你只是盲目地想要第一件东西,我想你可以叫:
Sitecore.Context.Item.Children.ToArray()[0]; //arrays are zero-based, so the first item is 0 and not 1
但是试着写一点你想做的事情(比如做菜单什么的)。你可能想在这里添加一些模板检查,但是这个怎么样:
if (Sitecore.Context.Item.HasChildren) {
var children = Sitecore.Context.Item.GetChildren();
Response.Redirect(LinkManager.GetItemUrl(children[0]))
}
这将查看当前页面是否有子页面,如果有,将重定向到该页面。实际上,我是在一家有办公地点的律师事务所的网站上这样做的。因此,当您转到“主要位置”页面时,它将按字母顺序重定向到第一个办公室。您可能希望在此处添加一些模板检查,但如何:
if (Sitecore.Context.Item.HasChildren) {
var children = Sitecore.Context.Item.GetChildren();
Response.Redirect(LinkManager.GetItemUrl(children[0]))
}
这将查看当前页面是否有子页面,如果有,将重定向到该页面。实际上,我是在一家有办公地点的律师事务所的网站上这样做的。因此,当您转到“主要位置”页面时,它将按字母顺序重定向到第一个办公室。实际上,我已经为我们的一个更大的网站实现了这种行为 你也可以这样做的一种工作方式是:
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);
}
if(item.TemplateName.ToLower().ToString()=“主菜单项”)
{
if(item.Children.Any())
{
url=GetItemUrl(item.Children.First());
}
其他的
{
url=GetItemUrl(项目);
}
}
其他的
{
url=GetItemUrl(项目);
}
在本例中,GetItemUrl用于获取url,但我可以想象您使用LinkManager.GetItemUrl(Item) 实际上,我已经为我们的一个更大的网站实现了这种行为 你也可以这样做的一种工作方式是:
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);
}
if(item.TemplateName.ToLower().ToString()=“主菜单项”)
{
if(item.Children.Any())
{
url=GetItemUrl(item.Children.First());
}
其他的
{
url=GetItemUrl(项目);
}
}
其他的
{
url=GetItemUrl(项目);
}
在本例中,GetItemUrl用于获取url,但我可以想象您使用LinkManager.GetItemUrl(Item) 您使用的是xslt还是codebehind?啊,我的答案不适用。您使用的是xslt还是codebehind?啊,我的答案不适用。我正在尝试对站点范围的导航和面包屑执行此操作。我已经实现了您的建议,但唯一的问题是,如果用户要创建指向父对象的内部链接,当我希望父对象的页面/项目显示第一个子对象(如果它有子对象)时,他们仍然可以显示该页面/项目。这有意义吗?你知道如何防止这种情况发生吗?嗯。。。如果你想做的是:每次一个人进入“关于我们”页面,他们都会看到来自第一个孩子的信息(“信息”),那么我实际上只是在“关于我们”页面的模板上做一些子布局,重定向到第一个孩子页面。这样,如果用户以某种方式进入页面,他们总是被重定向到子页面。它很简单(也就是说,更容易编程),失败的例子也更少。好吧,是的,这是有道理的。我会这么做的。谢谢。我正在尝试为站点范围的导航和面包屑这样做。我已经实现了您的建议,但唯一的问题是,如果用户要创建指向父对象的内部链接,当我希望父对象的页面/项目显示第一个子对象(如果它有子对象)时,他们仍然可以显示该页面/项目。这有意义吗?你知道如何防止这种情况发生吗?嗯。。。如果你想做的是:每次一个人进入“关于我们”页面,他们都会看到来自第一个孩子的信息(“信息”),那么我实际上只是在“关于我们”页面的模板上做一些子布局,重定向到第一个孩子页面。这样,如果用户以某种方式进入页面,他们总是被重定向到子页面。它很简单(也就是说,更容易编程),失败的例子也更少。好吧,是的,这是有道理的。我会这么做的。谢谢