Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sitecore:如何显示第一个子项中的内容?_Sitecore - Fatal编程技术网

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?啊,我的答案不适用。我正在尝试对站点范围的导航和面包屑执行此操作。我已经实现了您的建议,但唯一的问题是,如果用户要创建指向父对象的内部链接,当我希望父对象的页面/项目显示第一个子对象(如果它有子对象)时,他们仍然可以显示该页面/项目。这有意义吗?你知道如何防止这种情况发生吗?嗯。。。如果你想做的是:每次一个人进入“关于我们”页面,他们都会看到来自第一个孩子的信息(“信息”),那么我实际上只是在“关于我们”页面的模板上做一些子布局,重定向到第一个孩子页面。这样,如果用户以某种方式进入页面,他们总是被重定向到子页面。它很简单(也就是说,更容易编程),失败的例子也更少。好吧,是的,这是有道理的。我会这么做的。谢谢。我正在尝试为站点范围的导航和面包屑这样做。我已经实现了您的建议,但唯一的问题是,如果用户要创建指向父对象的内部链接,当我希望父对象的页面/项目显示第一个子对象(如果它有子对象)时,他们仍然可以显示该页面/项目。这有意义吗?你知道如何防止这种情况发生吗?嗯。。。如果你想做的是:每次一个人进入“关于我们”页面,他们都会看到来自第一个孩子的信息(“信息”),那么我实际上只是在“关于我们”页面的模板上做一些子布局,重定向到第一个孩子页面。这样,如果用户以某种方式进入页面,他们总是被重定向到子页面。它很简单(也就是说,更容易编程),失败的例子也更少。好吧,是的,这是有道理的。我会这么做的。谢谢