Umbraco, как связать навигацию с помощью asp.net mvc

Я только начинаю работать с Umbraco 7, я создал 2 типа документов и 3 страницы,

я использую темплейт, который я загружаю из стартового комплекта..

во-первых, почему так сложно понять эту платформу?!?! я уже видел все клипы на Umbraco.tv..

второй и важный вопрос: почему панель навигации не показывает мне все страницы? кажется, что у меня есть только 1 страница, которая уже жестко закодирована..

Вот код шаблона:

@inherits UmbracoTemplatePage
@{
    // Model.Content is the current page that we're on AncestorsOrSelf is all of the ancestors this page has in the tree
    // (1) means: go up to level 1 and stop looking for more ancestors when you get there First() gets the first ancestor found (the home page, on level 1)
    var homePage = CurrentPage.AncestorsOrSelf(1).First();
    var menuItems = homePage.Children.Where("UmbracoNaviHide == false");
}
<!-- Nav -->
<ul class="menu">
    @* If the Url of the current page is "/" then we want to add the class "current_page_item" *@
    @* Otherwise, we set the class to null, that way it will not even be added to the <li> element *@
    <li class="@(CurrentPage.Url == "/" ? "sel" : null)">
        <a href="/homepage">Home</a>
    </li>
    @foreach (var item in menuItems)
    {
        var childrenItems = item.Children.Where("UmbracoNaviHide == false");
        <li class="@(CurrentPage.Id == item.Id ? "sel" : null)">
            <a href="@item.Url">@item.Name</a>
            @createSubmenu(childrenItems, item.Id)
        </li>
    }
</ul>

@helper createSubmenu(IEnumerable<IPublishedContent> nodes, int? parentId) {
    if (nodes.Count() > 0){
        <ul>
        @foreach (var node in nodes)
        {
            var childrenItems = node.Children.Where("UmbracoNaviHide == false");
            <li class="@(CurrentPage.Id == node.Id ? "sel" : null)">
                <a href="@node.Url">@node.Name</a>
                @createSubmenu(childrenItems, node.Id)
            </li>
        }
        </ul>
    }
}
<!-- /Nav -->

person Idoshin    schedule 07.07.2014    source источник
comment
Пожалуйста, попробуйте так: var menuItems = homePage.Children.Where(x.GetPropertyValue(umbracoNaviHide)==1); и измените код с помощью .Where(x.GetPropertyValue(umbracoNaviHide)==1) везде, где вы когда-либо использовали .Where(UmbracoNaviHide == false).   -  person Jayaraj.K    schedule 07.07.2014


Ответы (1)


  1. Umbraco настолько сложен (это не так), потому что это платформа, которая получает всю свою славу, когда ее использует разработчик. Я имею в виду, что многие люди ожидают, что продукт будет «готовым» веб-сайтом, на котором можно установить тему, а затем отредактировать контент. Это Вордпресс. Умбрако не такой. У него есть несколько стартовых наборов, я не думаю, что они сильно помогают. Когда я создаю сайт Umbraco, я всегда начинаю с чистого листа.
  2. Теперь вы пытаетесь распечатать свое навигационное меню из того, что я вижу. Вот код, который я рекомендую использовать для этого. Кроме того, вы можете рассмотреть возможность использования основного шаблона, который будет иметь вашу навигацию.

    <ul> @{ var homeNode = Model.Content.AncestorOrSelf("[HomeNodeDocumentType]"); } @foreach (var node in homeNode.Children.Where(x => x.IsVisible)) { <li> <a href="@node.Url">@node.AsDynamic().yourFieldForTheTitle</a> </li> } </ul>

Некоторые ключевые моменты:

  • Предыдущий код, который у вас был, был для многоуровневых меню, вы можете переписать код, который я предоставил для этого, если это необходимо. Я считаю, что это не так уж и нужно.
  • Обратите внимание на «yourFieldForTheTitle», это настраиваемая текстовая строка, которую вы должны добавить к своему типу документа, не используйте Name, это вызовет у вас головную боль в будущем.
  • Обратите внимание на тип документа «[HomeNodeDocumentType]». При обходе дерева используйте их для быстрого перехода к нужному узлу.
  • Наконец, настройте свой сайт Umbraco с помощью Visual Studio, Intellisense поможет вам начать работу.

Вот об этом! Umbraco настолько хорош, придерживайтесь его, и оно того стоит!

person Sébastien Richer    schedule 08.07.2014