protected IList<CategoryModel> PrepareCategorySimpleModels(int rootCategoryId, IList<int> loadSubCategoriesForIds, int level, int levelsToLoad, bool validateIncludeInTopMenu) { var result = new List<CategoryModel>(); foreach (var category in _categoryService.GetAllCategoriesByParentCategoryId(rootCategoryId)) { if (validateIncludeInTopMenu && !category.IncludeInTopMenu) { continue; } var categoryModel = new CategoryModel() { Id = category.Id, Name = category.GetLocalized(x => x.Name), SeName = category.GetSeName() }; //load subcategories? bool loadSubCategories = false; if (loadSubCategoriesForIds == null) { //load all subcategories loadSubCategories = true; } else { //we load subcategories only for certain categories for (int i = 0; i <= loadSubCategoriesForIds.Count - 1; i++) { if (loadSubCategoriesForIds[i] == category.Id) { loadSubCategories = true; break; } } } if (levelsToLoad <= level) { loadSubCategories = false; } if (loadSubCategories) { var subCategories = PrepareCategorySimpleModels(category.Id, loadSubCategoriesForIds, level + 1, levelsToLoad, validateIncludeInTopMenu); categoryModel.SubCategories.AddRange(subCategories); } result.Add(categoryModel); } return result; }
public ActionResult Category(int categoryId, CatalogPagingFilteringModel command) { var category = _categoryService.GetCategoryById(categoryId); if (category == null || category.Deleted) return Content(""); //Check whether the current user has a "Manage catalog" permission //It allows him to preview a category before publishing if (!category.Published && !_permissionService.Authorize(StandardPermissionProvider.ManageCategories)) return Content(""); //ACL (access control list) if (!_aclService.Authorize(category)) return Content(""); //Store mapping if (!_storeMappingService.Authorize(category)) return Content(""); if (category.PageSizeOptions != null) { var pageSizes= category.PageSizeOptions .Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries); int temp = 0; if (int.TryParse(pageSizes.FirstOrDefault(), out temp)) { if (temp > 0) { command.PageSize = temp; } } } if (command.PageSize == 0) { command.PageSize = 8; } if (command.PageNumber <= 0) command.PageNumber = 1; var model = new CategoryModel() { Id = category.Id, Name = category.GetLocalized(x => x.Name), SeName = category.GetSeName(), Description = category.GetLocalized(x => x.Description) }; //subcategories model.SubCategories = _categoryService .GetAllCategoriesByParentCategoryId(categoryId) .Select(x => { var subCatName = x.GetLocalized(y => y.Name); var subCatModel = new CategoryModel() { Id = x.Id, Name = subCatName, SeName = x.GetSeName(), }; //prepare picture model int pictureSize = 125; var picture = _pictureService.GetPictureById(x.PictureId); subCatModel.PictureModel = new PictureModel() { FullSizeImageUrl = _pictureService.GetPictureUrl(picture), ImageUrl = _pictureService.GetPictureUrl(picture, pictureSize), Title = string.Format(_localizationService.GetResource("Media.Category.ImageLinkTitleFormat"), subCatName), AlternateText = string.Format(_localizationService.GetResource("Media.Category.ImageAlternateTextFormat"), subCatName) }; return subCatModel; }) .ToList(); var categoryIds = new List<int>(); if (categoryId > 0) { categoryIds.Add(categoryId); } //products IList<int> filterableSpecificationAttributeOptionIds = null; var products = _productService.SearchProducts(out filterableSpecificationAttributeOptionIds, categoryIds: categoryIds, storeId: _storeContext.CurrentStore.Id, visibleIndividuallyOnly: true, featuredProducts: null, orderBy: ProductSortingEnum.Position, pageIndex: command.PageNumber - 1, pageSize: command.PageSize); model.Products = PrepareProductOverviewModels(products).ToList(); model.PagingFilteringContext.LoadPagedList(products); return PartialView("Nop.Plugin.Misc.FacebookShop.Views.MiscFacebookShop.Category", model); }