protected IList <CategoryNavigationModel.CategoryModel> PrepareCategoryNavigationModel(int rootCategoryId, ref int lavel, IList <int> customerCategories) { lavel--; int newLavel = lavel; var result = new List <CategoryNavigationModel.CategoryModel>(); var categories = _categoryService.GetAllCategoriesByParentCategoryId(rootCategoryId); categories = (from p in categories join x in customerCategories on p.Id equals x select p).ToList(); foreach (var category in categories) { var categoryModel = new CategoryNavigationModel.CategoryModel() { Id = category.Id, Name = category.GetLocalized(x => x.Name), SeName = category.GetSeName(_workContext.WorkingLanguage.Id) }; //subcategories if (lavel > 0) { categoryModel.SubCategories.AddRange(PrepareCategoryNavigationModel(category.Id, ref newLavel, customerCategories)); } result.Add(categoryModel); } return(result); }
protected TreeNode<CategoryNavigationModel.CategoryModel> PrepareCategoryNavigationModel() { var curParent = new TreeNode<CategoryNavigationModel.CategoryModel>(new CategoryNavigationModel.CategoryModel() { Id = 0, Name = "_ROOT_", Level = -1 // important }); Category prevCat = null; int level = 0; var categories = _categoryService.GetAllCategories(); foreach (var category in categories) { var model = new CategoryNavigationModel.CategoryModel() { Id = category.Id, Name = category.GetLocalized(x => x.Name), SeName = category.GetSeName() }; // determine parent if (prevCat != null) { if (category.ParentCategoryId != curParent.Value.Id) { if (category.ParentCategoryId == prevCat.Id) { // level +1 curParent = curParent.LastChild; level++; } else { // level -x while (!curParent.IsRoot) { if (curParent.Value.Id == category.ParentCategoryId) { break; } curParent = curParent.Parent; level--; } } } } // set level model.Level = level; // add to parent curParent.Append(model); prevCat = category; } var root = curParent.Root; // event _eventPublisher.Publish(new NavigationModelBuiltEvent(root)); return root; }