Implemented level-based alternates for MenuItem and MenuItemLink.

This commit is contained in:
Piotr Szmyd
2014-07-22 21:04:15 +02:00
parent 313dc0015f
commit 0d03ad2ca6
3 changed files with 29 additions and 3 deletions

View File

@@ -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")

View File

@@ -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 {

View File

@@ -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);