我试图在umbraco中创建可自定义的菜单。即用户应该能够添加/删除/编辑菜单中的任何菜单项。 (用户不是开发人员)
但我不知道该怎么做..我听说过Macros但是对它们了解不多,所以无法使用它。
我认为这也是在此之前完成的。
提前致谢
答案 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宏中的导航。