我可以在umbraco中创建可自定义菜单吗?

时间:2013-02-16 14:35:11

标签: content-management-system umbraco

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

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

我认为这也是在此之前完成的。

提前致谢

2 个答案:

答案 0 :(得分:2)

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

尝试一些可用的入门套件。它们将带有基于您的节点构建导航的宏,并且可以让您很好地了解它们的工作方式。您甚至可以使用入门套件开始,然后根据需要进行修改。当你开始使用umbraco时,这就是我的建议。 Umbraco大约有4个左右的初学者,我们的Umbraco有several more其他用户贡献。

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

如果您登录Umbraco后台并转到Developer部分,应该看到Scripting Files。右键单击“脚本文件”,然后选择“创建”。选择文件名,例如导航,然后从“选择模板”菜单中选择“站点地图”,然后单击“创建”。您最终应该使用以下剃刀代码:

@*
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菜单。您可以通过插入宏将其插入模板。

答案 1 :(得分:0)

查看XSLT或Razor的默认顶部导航模板。这应该让你知道从哪里开始以及导航在Umbraco中的运作方式。我第二个道格拉斯的回答是导航通常反映内容部分中的内容结构。

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