0

我试图在 umbraco 中创建可自定义的菜单。即用户应该能够添加/删除/编辑菜单中的任何菜单项。(用户将不是开发人员)

但我不知道该怎么做..我听说过宏,但对它们了解不多,所以不能使用它。

我想这也曾经做过..

提前致谢

4

2 回答 2

2

通常,您的菜单将反映您在 umbraco 中的节点结构。这是让您的客户控制网站导航的最简单方法。如果您不希望菜单中有节点,您可以使用文档类型的umbracoNaviHide属性。

试用一些可用的入门套件。它们将附带基于您的节点构建导航的宏,并将让您很好地了解它们的工作原理。您甚至可以从使用 starterkit 开始,然后随意修改它。当您开始使用 umbraco 时,这就是我的建议。Umbraco 有大约 4 个内置的入门套件,我们的 Umbraco 有更多其他用户贡献的。

要使用 Umbraco 提供的默认导航模板:

如果您登录 Umbraco 后台并前往开发人员部分,应该会看到脚本文件。右键单击脚本文件并选择创建。选择一个文件名,例如 Nav,然后从“选择模板”菜单中选择站点地图,然后单击创建。您应该最终得到以下剃须刀代码:

@*
SITEMAP
=================================
This snippet generates a complete sitemap of all pages that are published and visible (it'll filter out any
pages with a property named "umbracoNaviHide" that's set to 'true'). It's also a great example on how to make
helper methods in Razor and how to pass values to your '.Where' filters.

How to Customize for re-use (only applies to Macros, not if you insert this snippet directly in a template):
- If you add a Macro Parameter with the alias of "MaxLevelForSitemap" which specifies how deep in the hierarchy to traverse

How it works:
- The first line (var maxLevelForSitemap) assigns default values if none is specified via Macro Parameters
- Next is a helper method 'traverse' which uses recursion to keep making new lists for each level in the sitemap
- Inside the the 'traverse' method there's an example of using a 'Dictionary' to pass the 'maxLevelForSitemap' to
  the .Where filter
- Finally the 'traverse' method is called taking the very top node of the website by calling AncesterOrSelf()

NOTE: It is safe to remove this comment (anything between @ * * @), the code that generates the list is only the below!
*@

@inherits umbraco.MacroEngines.DynamicNodeContext

@helper traverse(dynamic node){
var maxLevelForSitemap = String.IsNullOrEmpty(Parameter.MaxLevelForSitemap) ? 4 : int.Parse(Parameter.MaxLevelForSitemap);

var values = new Dictionary<string,object>();
values.Add("maxLevelForSitemap", maxLevelForSitemap) ;

   var items = node.Children.Where("Visible").Where("Level <= maxLevelForSitemap", values);
   if (items.Count() > 0) {
   <ul>
            @foreach (var item in items) {
                <li>
          <a href="@item.Url">@item.Name</a>
          @traverse(item)
                </li>
            }
   </ul>
    }
}
<div class="sitemap">
    @traverse(@Model.AncestorOrSelf())
</div>

这将生成您网站结构的 ul/li 菜单。您可以通过插入宏将其插入模板。

于 2013-02-16T15:30:28.327 回答
0

查看 XSLT 或 Razor 的默认顶部导航模板。这应该让您了解从哪里开始以及导航通常如何在 Umbraco 中工作。我赞同道格拉斯的回答,即导航通常反映内容部分中的内容结构。

如果您真的想要一个独立于内容树结构将项目添加到导航的设置,那么在您的主页上使用多节点树选择器并将其作为顶部导航宏中的导航。

于 2013-02-16T20:59:49.667 回答