diff --git a/src/Orchard.Web/Modules/Orchard.Taxonomies/Controllers/AdminController.cs b/src/Orchard.Web/Modules/Orchard.Taxonomies/Controllers/AdminController.cs index e878ce0ab..6fd68e5ec 100644 --- a/src/Orchard.Web/Modules/Orchard.Taxonomies/Controllers/AdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.Taxonomies/Controllers/AdminController.cs @@ -149,7 +149,7 @@ namespace Orchard.Taxonomies.Controllers { } parentTerm.Position++; - term.Weight = parentTerm.Position; + term.Weight = 10 - parentTerm.Position; term.Container = parentTerm.Term == null ? taxonomy.ContentItem : parentTerm.Term.ContentItem; diff --git a/src/Orchard.Web/Modules/Orchard.Taxonomies/Drivers/TaxonomyNavigationPartDriver.cs b/src/Orchard.Web/Modules/Orchard.Taxonomies/Drivers/TaxonomyNavigationPartDriver.cs index c1ec63fd2..c0d7ecb90 100644 --- a/src/Orchard.Web/Modules/Orchard.Taxonomies/Drivers/TaxonomyNavigationPartDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Taxonomies/Drivers/TaxonomyNavigationPartDriver.cs @@ -56,7 +56,7 @@ namespace Orchard.Taxonomies.Drivers { // if no taxonomy is selected, take the first available one as // the terms drop down needs one by default - if (model.SelectedTaxonomyId == -1) { + if (model.SelectedTaxonomyId <= 0) { var firstTaxonomy = taxonomies.FirstOrDefault(); if (firstTaxonomy != null) { model.SelectedTaxonomyId = firstTaxonomy.Id; diff --git a/src/Orchard.Web/Modules/Orchard.Taxonomies/Navigation/TaxonomyNavigationProvider.cs b/src/Orchard.Web/Modules/Orchard.Taxonomies/Navigation/TaxonomyNavigationProvider.cs index 39a095d82..a29eea1d7 100644 --- a/src/Orchard.Web/Modules/Orchard.Taxonomies/Navigation/TaxonomyNavigationProvider.cs +++ b/src/Orchard.Web/Modules/Orchard.Taxonomies/Navigation/TaxonomyNavigationProvider.cs @@ -1,4 +1,6 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; +using System.Linq; using Orchard.ContentManagement; using Orchard.Localization; using Orchard.Taxonomies.Models; @@ -9,11 +11,11 @@ namespace Orchard.Taxonomies.Navigation { /// /// Dynamically injects query results as menu items on NavigationQueryMenuItem elements /// - public class NavigationQueryProvider : INavigationFilter { + public class TaxonomyNavigationProvider : INavigationFilter { private readonly IContentManager _contentManager; private readonly ITaxonomyService _taxonomyService; - public NavigationQueryProvider( + public TaxonomyNavigationProvider( IContentManager contentManager, ITaxonomyService taxonomyService) { _contentManager = contentManager; @@ -31,10 +33,12 @@ namespace Orchard.Taxonomies.Navigation { var rootTerm = _taxonomyService.GetTerm(taxonomyNavigationPart.TermId); var allTerms = rootTerm != null - ? _taxonomyService.GetChildren(rootTerm) - : _taxonomyService.GetTerms(taxonomyNavigationPart.TaxonomyId); + ? _taxonomyService.GetChildren(rootTerm).ToArray() + : _taxonomyService.GetTerms(taxonomyNavigationPart.TaxonomyId).ToArray(); var menuPosition = item.Position; + var rootPath = rootTerm == null ? "" : rootTerm.FullPath; + foreach (var contentItem in allTerms) { if (contentItem != null) { var part = contentItem; @@ -42,6 +46,8 @@ namespace Orchard.Taxonomies.Navigation { var menuText = _contentManager.GetItemMetadata(part).DisplayText; var routes = _contentManager.GetItemMetadata(part).DisplayRouteValues; + var positions = contentItem.FullPath.Substring(rootPath.Length).Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries).Select(x => allTerms.First(t => t.Id == Int32.Parse(x)).Weight).ToArray(); + var inserted = new MenuItem { Text = new LocalizedString(menuText), IdHint = item.IdHint, @@ -52,7 +58,7 @@ namespace Orchard.Taxonomies.Navigation { RouteValues = routes, LocalNav = item.LocalNav, Items = new MenuItem[0], - Position = menuPosition + contentItem.Path.TrimEnd('/').Replace("/", "."), + Position = menuPosition + ":" + String.Join(".", positions.Select(x => x.ToString()).ToArray()), Permissions = item.Permissions, Content = part };