0

我刚开始使用 Umbraco 7,我创建了 2 个文档类型和 3 个页面,

我正在使用从入门工具包下载的模板。

首先,为什么这么难理解这个平台?!?!我已经看过 Umbraco.tv 中的所有剪辑了。

第二个重要的问题是:为什么导航栏没有显示所有页面?看来我只有一页已经硬编码了..

这是模板的代码:

@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 -->
4

1 回答 1

2
  1. Umbraco 非常难(它不是),因为它是一个平台,当开发人员使用它时,它会夺走它的全部荣耀。我的意思是,许多人希望该产品是一个“开箱即用”的网站,您可以安装主题然后编辑内容。那是WordPress。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”,这是您必须添加到文档类型中的自定义文本字符串,不要使用名称,这会让您头疼。
  • 注意“[HomeNodeDocumentType]”文档类型。遍历树时,使用它们快速导航到所需的节点。
  • 最后,使用 Visual Studio 设置您的 Umbraco 站点,Intellisense 将帮助您开始。

就是这样!Umbraco 太好了,坚持下去,它会值得你花时间!

于 2014-07-08T13:34:38.857 回答