Sitecore: Как отобразить контент с предметов первого ребенка? - PullRequest
1 голос
/ 29 марта 2011

Скажем, у меня есть структура контента, как:

About Us
  Information
  Contact Us
  Blah 

Когда пользователь нажимает О нас, как я могу заставить его отображать информационную страницу?

Это потребуется для нескольких разделов сайта, поэтому жесткие ссылки / перенаправления не будут работать.

Как сделать так, чтобы на странице отображалось содержимое первого дочернего элемента, если он существует?

Ответы [ 4 ]

4 голосов
/ 29 марта 2011

Я думаю, что будет проще ответить, если вы опишите, что вы пытаетесь сделать.

Но если вы находитесь на странице "О нас" (т.е. Sitecore.Context.Item - это "О нас"Us "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

Но попробуйте немного написать о том, что вы пытаетесь сделать (например, составить меню или что-то в этом роде).

2 голосов
/ 30 марта 2011

Я фактически реализовал это поведение для одного из наших больших веб-сайтов.

Работающий (работает для меня) способ, которым вы также можете сделать это:

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

2 голосов
/ 29 марта 2011

Предполагается, что вы используете xslt, а пункт "О нас" является элементом контекста:

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

item получит все элементы ниже контекстного (текущего) элемента, а [1] выберет первый.

1 голос
/ 29 марта 2011

Вы можете добавить сюда несколько шаблонов проверки, но как насчет этого:

if (Sitecore.Context.Item.HasChildren) {
  var children = Sitecore.Context.Item.GetChildren();
  Response.Redirect(LinkManager.GetItemUrl(children[0]))
}

Будет показано, есть ли у текущей страницы дочерние элементы, и если это так, перенаправится на эту страницу. Я на самом деле делаю это на сайте юридической фирмы, которая имеет офисы. Поэтому, когда вы перейдете на страницу основных местоположений, она будет перенаправлена ​​на первый офис в алфавитном порядке.

...