mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
Implemented level-based alternates for MenuItem and MenuItemLink.
This commit is contained in:
@@ -95,7 +95,11 @@ namespace Orchard.Core.Shapes {
|
||||
.OnDisplaying(displaying => {
|
||||
var menuItem = displaying.Shape;
|
||||
var menu = menuItem.Menu;
|
||||
int level = menuItem.Level;
|
||||
|
||||
menuItem.Metadata.Alternates.Add("MenuItem__level__" + level);
|
||||
menuItem.Metadata.Alternates.Add("MenuItem__" + EncodeAlternateElement(menu.MenuName));
|
||||
menuItem.Metadata.Alternates.Add("MenuItem__" + EncodeAlternateElement(menu.MenuName) + "__level__" + level);
|
||||
});
|
||||
|
||||
builder.Describe("MenuItemLink")
|
||||
@@ -103,23 +107,31 @@ namespace Orchard.Core.Shapes {
|
||||
var menuItem = displaying.Shape;
|
||||
string menuName = menuItem.Menu.MenuName;
|
||||
string contentType = null;
|
||||
int level = menuItem.Level;
|
||||
if (menuItem.Content != null) {
|
||||
contentType = ((IContent) menuItem.Content).ContentItem.ContentType;
|
||||
}
|
||||
|
||||
menuItem.Metadata.Alternates.Add("MenuItemLink__level__" + level);
|
||||
|
||||
// MenuItemLink__[ContentType] e.g. MenuItemLink-HtmlMenuItem
|
||||
// MenuItemLink__[ContentType]__level__[level] e.g. MenuItemLink-HtmlMenuItem-level-2
|
||||
if (contentType != null) {
|
||||
menuItem.Metadata.Alternates.Add("MenuItemLink__" + EncodeAlternateElement(contentType));
|
||||
menuItem.Metadata.Alternates.Add("MenuItemLink__" + EncodeAlternateElement(contentType) + "__level__" + level);
|
||||
}
|
||||
|
||||
// MenuItemLink__[MenuName] e.g. MenuItemLink-Main-Menu
|
||||
// MenuItemLink__[MenuName]__level__[level] e.g. MenuItemLink-Main-Menu-level-2
|
||||
menuItem.Metadata.Alternates.Add("MenuItemLink__" + EncodeAlternateElement(menuName));
|
||||
menuItem.Metadata.Alternates.Add("MenuItemLink__" + EncodeAlternateElement(menuName) + "__level__" + level);
|
||||
|
||||
// MenuItemLink__[MenuName]__[ContentType] e.g. MenuItemLink-Main-Menu-HtmlMenuItem
|
||||
// MenuItemLink__[MenuName]__[ContentType] e.g. MenuItemLink-Main-Menu-HtmlMenuItem-level-2
|
||||
if (contentType != null) {
|
||||
menuItem.Metadata.Alternates.Add("MenuItemLink__" + EncodeAlternateElement(menuName) + "__" + EncodeAlternateElement(contentType));
|
||||
menuItem.Metadata.Alternates.Add("MenuItemLink__" + EncodeAlternateElement(menuName) + "__" + EncodeAlternateElement(contentType) + "__level__" + level);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
builder.Describe("LocalMenu")
|
||||
|
||||
@@ -8,10 +8,12 @@ using Orchard.Security.Permissions;
|
||||
namespace Orchard.UI.Navigation {
|
||||
public class MenuItem {
|
||||
private IList<string> _classes = new List<string>();
|
||||
private IEnumerable<MenuItem> _items;
|
||||
|
||||
public MenuItem() {
|
||||
Permissions = Enumerable.Empty<Permission>();
|
||||
LinkToFirstChild = true;
|
||||
Level = 1;
|
||||
}
|
||||
|
||||
public LocalizedString Text { get; set; }
|
||||
@@ -23,8 +25,19 @@ namespace Orchard.UI.Navigation {
|
||||
public bool LocalNav { get; set; }
|
||||
public string Culture { get; set; }
|
||||
public bool Selected { get; set; }
|
||||
public int Level { get; set; }
|
||||
public RouteValueDictionary RouteValues { get; set; }
|
||||
public IEnumerable<MenuItem> Items { get; set; }
|
||||
|
||||
public IEnumerable<MenuItem> Items {
|
||||
get { return _items; }
|
||||
set {
|
||||
_items = value;
|
||||
foreach (var item in _items) {
|
||||
item.Level = Level + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerable<Permission> Permissions { get; set; }
|
||||
public IContent Content { get; set; }
|
||||
public IList<string> Classes {
|
||||
|
||||
@@ -182,7 +182,8 @@ namespace Orchard.UI.Navigation {
|
||||
.Item(menuItem)
|
||||
.Menu(menu)
|
||||
.Parent(parentShape)
|
||||
.Content(menuItem.Content);
|
||||
.Content(menuItem.Content)
|
||||
.Level(menuItem.Level);
|
||||
|
||||
foreach (var className in menuItem.Classes)
|
||||
menuItemShape.Classes.Add(className);
|
||||
|
||||
Reference in New Issue
Block a user