【问题标题】:Can i create Customizable Menu's in umbraco我可以在 umbraco 中创建可自定义的菜单吗
【发布时间】:2013-02-16 14:35:10
【问题描述】:

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

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

我想这也是以前做过的..

提前致谢

【问题讨论】:

  • 这不是一个真正的问题。到目前为止,您尝试过什么?

标签: content-management-system umbraco


【解决方案1】:

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

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

使用 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 菜单。您可以通过插入宏将其插入到模板中。

【讨论】:

  • 嗨,Douglas,感谢您的建议..但我正在寻找的是..通过宏或任何其他方式的现成多级菜单..
  • 啊,所以你想要一个代码示例?好的,我已经更新了我的答案。
  • 哦!我已经通过宏实现了...这很简单..但只是因为我不知道它是如何工作的,所以我卡住了。 Umbraco 提供了许多可供使用的功能……这很好。再次感谢你。
  • 这非常有帮助。 Umbraco 是与 Joomla 等 CMS 完全不同的范例——您期望看到的东西在 Umbraco 中根本不存在。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多