public CategorySpecsModel(CategorySimpleModel model) { this.Id = model.Id; this.Name = model.Name; this.NumberOfProducts = model.NumberOfProducts; this.SeName = model.SeName; this.PriceRanges = model.PriceRanges; this.SubCategories = model.SubCategories; this.PriceRangeFilter = new CatalogPagingFilteringModel.PriceRangeFilterModel(); this.SpecificationFilter = new CatalogPagingFilteringModel.SpecificationFilterModel(); }
protected virtual IList<CategorySimpleModel> PrepareCategorySimpleModels(int rootCategoryId, IList<int> loadSubCategoriesForIds, int level, int levelsToLoad, bool validateIncludeInTopMenu) { var result = new List<CategorySimpleModel>(); foreach (var category in _categoryService.GetAllCategoriesByParentCategoryId(rootCategoryId)) { if (validateIncludeInTopMenu && !category.IncludeInTopMenu) { continue; } var categoryModel = new CategorySimpleModel() { Id = category.Id, Name = category.GetLocalized(x => x.Name), SeName = category.GetSeName() }; //product number for each category if (_catalogSettings.ShowCategoryProductNumber) { var customerRolesIds = _workContext.CurrentCustomer.CustomerRoles .Where(cr => cr.Active).Select(cr => cr.Id).ToList(); string cacheKey = string.Format(ModelCacheEventConsumer.CATEGORY_NUMBER_OF_PRODUCTS_MODEL_KEY, string.Join(",", customerRolesIds), _storeContext.CurrentStore.Id, category.Id); categoryModel.NumberOfProducts = _cacheManager.Get(cacheKey, () => { var categoryIds = new List<int>(); categoryIds.Add(category.Id); //include subcategories if (_catalogSettings.ShowCategoryProductNumberIncludingSubcategories) categoryIds.AddRange(GetChildCategoryIds(category.Id)); return _productService.GetCategoryProductNumber(categoryIds, _storeContext.CurrentStore.Id); }); } //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; }
protected virtual IList<CategorySimpleModel> PrepareCategorySimpleModels(int rootCategoryId, bool loadSubCategories = true,IList<Category> allCategories = null) { var result = new List<CategorySimpleModel>(); //little hack for performance optimization. //we know that this method is used to load top and left menu for categories. //it'll load all categories anyway. //so there's no need to invoke "GetAllCategoriesByParentCategoryId" multiple times (extra SQL commands) to load childs //so we load all categories at once //if you don't like this implementation if you can uncomment the line below (old behavior) and comment several next lines (before foreach) //var categories = _categoryService.GetAllCategoriesByParentCategoryId(rootCategoryId); if (allCategories == null) { //load categories if null passed //we implemeneted it this way for performance optimization - recursive iterations (below) //this way all categories are loaded only once allCategories = _categoryService.GetAllCategories(); } var categories = allCategories.Where(c => c.ParentCategoryId == rootCategoryId).ToList(); foreach (var category in categories) { var categoryModel = new CategorySimpleModel { Id = category.Id, Name = category.GetLocalized(x => x.Name), SeName = category.GetSeName(), IncludeInTopMenu = category.IncludeInTopMenu }; //prepare picture model int pictureSize = _mediaSettings.CategoryThumbPictureSize; var categoryPictureCacheKey = string.Format(ModelCacheEventConsumer.CATEGORY_PICTURE_MODEL_KEY, category.Id, pictureSize, true, _workContext.WorkingLanguage.Id, _webHelper.IsCurrentConnectionSecured(), _storeContext.CurrentStore.Id); categoryModel.PictureModel = _cacheManager.Get(categoryPictureCacheKey, () => { var picture = _pictureService.GetPictureById(category.PictureId); var pictureModel = new PictureModel { FullSizeImageUrl = _pictureService.GetPictureUrl(picture), ImageUrl = _pictureService.GetPictureUrl(picture, pictureSize), Title = string.Format(_localizationService.GetResource("Media.Category.ImageLinkTitleFormat"), categoryModel.Name), AlternateText = string.Format(_localizationService.GetResource("Media.Category.ImageAlternateTextFormat"), categoryModel.Name) }; return pictureModel; }); //product number for each category if (_catalogSettings.ShowCategoryProductNumber) { string cacheKey = string.Format(ModelCacheEventConsumer.CATEGORY_NUMBER_OF_PRODUCTS_MODEL_KEY, string.Join(",", _workContext.CurrentCustomer.GetCustomerRoleIds()), _storeContext.CurrentStore.Id, category.Id); categoryModel.NumberOfProducts = _cacheManager.Get(cacheKey, () => { var categoryIds = new List<int>(); categoryIds.Add(category.Id); //include subcategories if (_catalogSettings.ShowCategoryProductNumberIncludingSubcategories) categoryIds.AddRange(GetChildCategoryIds(category.Id)); return _productService.GetCategoryProductNumber(categoryIds, _storeContext.CurrentStore.Id); }); } if (loadSubCategories) { var subCategories = PrepareCategorySimpleModels(category.Id, loadSubCategories, allCategories); categoryModel.SubCategories.AddRange(subCategories); } result.Add(categoryModel); } return result; }
protected virtual IList<CategorySimpleModel> PrepareCategorySimpleModels(int rootCategoryId, bool loadSubCategories = true, IList<Category> allCategories = null) { var result = new List<CategorySimpleModel>(); //little hack for performance optimization. //we know that this method is used to load top and left menu for categories. //it'll load all categories anyway. //so there's no need to invoke "GetAllCategoriesByParentCategoryId" multiple times (extra SQL commands) to load childs //so we load all categories at once //if you don't like this implementation if you can uncomment the line below (old behavior) and comment several next lines (before foreach) //var categories = _categoryService.GetAllCategoriesByParentCategoryId(rootCategoryId); if (allCategories == null) { //load categories if null passed //we implemeneted it this way for performance optimization - recursive iterations (below) //this way all categories are loaded only once allCategories = _categoryService.GetAllCategories(); } var categories = allCategories.Where(c => c.ParentCategoryId == rootCategoryId).ToList(); foreach (var category in categories) { var categoryModel = new CategorySimpleModel { Id = category.Id, Name = category.GetLocalized(x => x.Name), SeName = category.GetSeName(), IncludeInTopMenu = category.IncludeInTopMenu, //for nop.shop theme Description = category.Description, MetaDescription = category.MetaDescription, PictureId = category.PictureId }; //product number for each category if (_catalogSettings.ShowCategoryProductNumber) { string cacheKey = string.Format(ModelCacheEventConsumer.CATEGORY_NUMBER_OF_PRODUCTS_MODEL_KEY, string.Join(",", _workContext.CurrentCustomer.GetCustomerRoleIds()), _storeContext.CurrentStore.Id, category.Id); categoryModel.NumberOfProducts = _cacheManager.Get(cacheKey, () => { var categoryIds = new List<int>(); categoryIds.Add(category.Id); //include subcategories if (_catalogSettings.ShowCategoryProductNumberIncludingSubcategories) categoryIds.AddRange(GetChildCategoryIds(category.Id)); return _productService.GetCategoryProductNumber(categoryIds, _storeContext.CurrentStore.Id); }); } if (loadSubCategories) { var subCategories = PrepareCategorySimpleModels(category.Id, loadSubCategories, allCategories); categoryModel.SubCategories.AddRange(subCategories); } result.Add(categoryModel); } return result; }
protected IList<CategorySimpleModel> PrepareCategorySimpleModels(int rootCategoryId, IList<int> loadSubCategoriesForIds, int level, int levelsToLoad, bool validateIncludeInTopMenu) { var result = new List<CategorySimpleModel>(); foreach (var category in _categoryService.GetAllCategoriesByParentCategoryId(rootCategoryId)) { if (validateIncludeInTopMenu && !category.IncludeInTopMenu) { continue; } var categoryModel = new CategorySimpleModel() { Id = category.Id, Name = category.GetLocalized(x => x.Name), SeName = category.GetSeName() }; //product number for each category if (_catalogSettings.ShowCategoryProductNumber) { categoryModel.NumberOfProducts = GetCategoryProductNumber(category.Id); } //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; }
protected virtual IList<CategorySimpleModel> PrepareCategorySimpleModels(int rootCategoryId, IList<int> loadSubCategoriesForIds, int level, int levelsToLoad, bool validateIncludeInTopMenu) { var result = new List<CategorySimpleModel>(); foreach (var category in _categoryService.GetAllCategoriesByParentCategoryId(rootCategoryId)) { if (validateIncludeInTopMenu && !category.IncludeInTopMenu) { continue; } var categoryModel = new CategorySimpleModel { Id = category.Id, Name = category.GetLocalized(x => x.Name), SeName = category.GetSeName() }; //product number for each category if (_catalogSettings.ShowCategoryProductNumber) { var customerRolesIds = _workContext.CurrentCustomer.CustomerRoles .Where(cr => cr.Active).Select(cr => cr.Id).ToList(); string cacheKey = string.Format(ModelCacheEventConsumer.CATEGORY_NUMBER_OF_PRODUCTS_MODEL_KEY, string.Join(",", customerRolesIds), _storeContext.CurrentStore.Id, category.Id); categoryModel.NumberOfProducts = _cacheManager.Get(cacheKey, () => { var categoryIds = new List<int>(); categoryIds.Add(category.Id); //include subcategories if (_catalogSettings.ShowCategoryProductNumberIncludingSubcategories) categoryIds.AddRange(GetChildCategoryIds(category.Id)); return _productService.GetCategoryProductNumber(categoryIds, _storeContext.CurrentStore.Id); }); } //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); } //prepare picture model //Nyusoft int pictureSize = _mediaSettings.ProductDetailsPictureSize; var categoryPictureCacheKey = string.Format(ModelCacheEventConsumer.CATEGORY_PICTURE_MODEL_KEY, category.Id, pictureSize, true, _workContext.WorkingLanguage.Id, _webHelper.IsCurrentConnectionSecured(), _storeContext.CurrentStore.Id); categoryModel.PictureModel = _cacheManager.Get(categoryPictureCacheKey, () => { var picture = _pictureService.GetPictureById(category.PictureId); var pictureModel = new PictureModel { FullSizeImageUrl = _pictureService.GetPictureUrl(picture), ImageUrl = _pictureService.GetPictureUrl(picture, pictureSize), Title = string.Format(_localizationService.GetResource("Media.Category.ImageLinkTitleFormat"), category.Name), AlternateText = string.Format(_localizationService.GetResource("Media.Category.ImageAlternateTextFormat"), category.Name) }; return pictureModel; }); result.Add(categoryModel); } return result; }