/// <summary> /// Prepare the sitemap model /// </summary> /// <param name="pageModel">Sitemap page model</param> /// <returns>Sitemap model</returns> public virtual SitemapModel PrepareSitemapModel(SitemapPageModel pageModel) { var cacheKey = string.Format(ModelCacheEventConsumer.SITEMAP_PAGE_MODEL_KEY, _workContext.WorkingLanguage.Id, string.Join(",", _workContext.CurrentUser.GetUserRoleIds())); var cachedModel = _cacheManager.Get(cacheKey, () => { //get URL helper var urlHelper = _urlHelperFactory.GetUrlHelper(_actionContextAccessor.ActionContext); var model = new SitemapModel(); //prepare common items var commonGroupTitle = _localizationService.GetResource("Sitemap.General"); //home page model.Items.Add(new SitemapModel.SitemapItemModel { GroupTitle = commonGroupTitle, Name = _localizationService.GetResource("HomePage"), Url = urlHelper.RouteUrl("HomePage") }); //contact us model.Items.Add(new SitemapModel.SitemapItemModel { GroupTitle = commonGroupTitle, Name = _localizationService.GetResource("ContactUs"), Url = urlHelper.RouteUrl("ContactUs") }); //user info model.Items.Add(new SitemapModel.SitemapItemModel { GroupTitle = commonGroupTitle, Name = _localizationService.GetResource("Account.MyAccount"), Url = urlHelper.RouteUrl("UserInfo") }); return(model); }); //prepare model with pagination pageModel.PageSize = Math.Max(pageModel.PageSize, _commonSettings.SitemapPageSize); pageModel.PageNumber = Math.Max(pageModel.PageNumber, 1); var pagedItems = new PagedList <SitemapModel.SitemapItemModel>(cachedModel.Items, pageModel.PageNumber - 1, pageModel.PageSize); var sitemapModel = new SitemapModel { Items = pagedItems }; sitemapModel.PageModel.LoadPagedList(pagedItems); return(sitemapModel); }
public virtual IActionResult Sitemap(SitemapPageModel pageModel) { if (!_sitemapSettings.SitemapEnabled) { return(RedirectToRoute("Homepage")); } var model = _commonModelFactory.PrepareSitemapModel(pageModel); return(View(model)); }
public SitemapModel() { Items = new List <SitemapItemModel>(); PageModel = new SitemapPageModel(); }
/// <summary> /// Prepare the sitemap model /// </summary> /// <param name="pageModel">Sitemap page model</param> /// <returns>Sitemap model</returns> public virtual SitemapModel PrepareSitemapModel(SitemapPageModel pageModel) { var cacheKey = string.Format(ModelCacheEventConsumer.SITEMAP_PAGE_MODEL_KEY, _workContext.WorkingLanguage.Id, string.Join(",", _workContext.CurrentCustomer.GetCustomerRoleIds()), _storeContext.CurrentStore.Id); var cachedModel = _cacheManager.Get(cacheKey, () => { //get URL helper var urlHelper = _urlHelperFactory.GetUrlHelper(_actionContextAccessor.ActionContext); var model = new SitemapModel(); //prepare common items var commonGroupTitle = _localizationService.GetResource("Sitemap.General"); //home page model.Items.Add(new SitemapModel.SitemapItemModel { GroupTitle = commonGroupTitle, Name = _localizationService.GetResource("HomePage"), Url = urlHelper.RouteUrl("HomePage") }); //search model.Items.Add(new SitemapModel.SitemapItemModel { GroupTitle = commonGroupTitle, Name = _localizationService.GetResource("Search"), Url = urlHelper.RouteUrl("ProductSearch") }); //news if (_newsSettings.Enabled) { model.Items.Add(new SitemapModel.SitemapItemModel { GroupTitle = commonGroupTitle, Name = _localizationService.GetResource("News"), Url = urlHelper.RouteUrl("NewsArchive") }); } //blog if (_blogSettings.Enabled) { model.Items.Add(new SitemapModel.SitemapItemModel { GroupTitle = commonGroupTitle, Name = _localizationService.GetResource("Blog"), Url = urlHelper.RouteUrl("Blog") }); } //forums if (_forumSettings.ForumsEnabled) { model.Items.Add(new SitemapModel.SitemapItemModel { GroupTitle = commonGroupTitle, Name = _localizationService.GetResource("Forum.Forums"), Url = urlHelper.RouteUrl("Boards") }); } //contact us model.Items.Add(new SitemapModel.SitemapItemModel { GroupTitle = commonGroupTitle, Name = _localizationService.GetResource("ContactUs"), Url = urlHelper.RouteUrl("ContactUs") }); //customer info model.Items.Add(new SitemapModel.SitemapItemModel { GroupTitle = commonGroupTitle, Name = _localizationService.GetResource("Account.MyAccount"), Url = urlHelper.RouteUrl("CustomerInfo") }); //at the moment topics are in general category too var topics = _topicService.GetAllTopics(_storeContext.CurrentStore.Id).Where(topic => topic.IncludeInSitemap); model.Items.AddRange(topics.Select(topic => new SitemapModel.SitemapItemModel { GroupTitle = commonGroupTitle, Name = _localizationService.GetLocalized(topic, x => x.Title), Url = urlHelper.RouteUrl("Topic", new { SeName = _urlRecordService.GetSeName(topic) }) })); //categories if (_commonSettings.SitemapIncludeCategories) { var categoriesGroupTitle = _localizationService.GetResource("Sitemap.Categories"); var categories = _categoryService.GetAllCategories(storeId: _storeContext.CurrentStore.Id); model.Items.AddRange(categories.Select(category => new SitemapModel.SitemapItemModel { GroupTitle = categoriesGroupTitle, Name = _localizationService.GetLocalized(category, x => x.Name), Url = urlHelper.RouteUrl("Category", new { SeName = _urlRecordService.GetSeName(category) }) })); } //manufacturers if (_commonSettings.SitemapIncludeManufacturers) { var manufacturersGroupTitle = _localizationService.GetResource("Sitemap.Manufacturers"); var manufacturers = _manufacturerService.GetAllManufacturers(storeId: _storeContext.CurrentStore.Id); model.Items.AddRange(manufacturers.Select(manufacturer => new SitemapModel.SitemapItemModel { GroupTitle = manufacturersGroupTitle, Name = _localizationService.GetLocalized(manufacturer, x => x.Name), Url = urlHelper.RouteUrl("Manufacturer", new { SeName = _urlRecordService.GetSeName(manufacturer) }) })); } //products if (_commonSettings.SitemapIncludeProducts) { var productsGroupTitle = _localizationService.GetResource("Sitemap.Products"); var products = _productService.SearchProducts(storeId: _storeContext.CurrentStore.Id, visibleIndividuallyOnly: true); model.Items.AddRange(products.Select(product => new SitemapModel.SitemapItemModel { GroupTitle = productsGroupTitle, Name = _localizationService.GetLocalized(product, x => x.Name), Url = urlHelper.RouteUrl("Product", new { SeName = _urlRecordService.GetSeName(product) }) })); } //product tags if (_commonSettings.SitemapIncludeProductTags) { var productTagsGroupTitle = _localizationService.GetResource("Sitemap.ProductTags"); var productTags = _productTagService.GetAllProductTags(); model.Items.AddRange(productTags.Select(productTag => new SitemapModel.SitemapItemModel { GroupTitle = productTagsGroupTitle, Name = _localizationService.GetLocalized(productTag, x => x.Name), Url = urlHelper.RouteUrl("ProductsByTag", new { SeName = _urlRecordService.GetSeName(productTag) }) })); } return(model); }); //prepare model with pagination pageModel.PageSize = Math.Max(pageModel.PageSize, _commonSettings.SitemapPageSize); pageModel.PageNumber = Math.Max(pageModel.PageNumber, 1); var pagedItems = new PagedList <SitemapModel.SitemapItemModel>(cachedModel.Items, pageModel.PageNumber - 1, pageModel.PageSize); var sitemapModel = new SitemapModel { Items = pagedItems }; sitemapModel.PageModel.LoadPagedList(pagedItems); return(sitemapModel); }
/// <summary> /// Prepare the sitemap model /// </summary> /// <param name="pageModel">Sitemap page model</param> /// <returns>Sitemap model</returns> public virtual async Task <SitemapModel> PrepareSitemapModelAsync(SitemapPageModel pageModel) { if (pageModel == null) { throw new ArgumentNullException(nameof(pageModel)); } var cacheKey = _staticCacheManager.PrepareKeyForDefaultCache(NopModelCacheDefaults.SitemapPageModelKey, await _workContext.GetWorkingLanguageAsync(), _customerService.GetCustomerRoleIdsAsync(await _workContext.GetCurrentCustomerAsync()), await _storeContext.GetCurrentStoreAsync()); var cachedModel = await _staticCacheManager.GetAsync(cacheKey, async() => { //get URL helper var urlHelper = _urlHelperFactory.GetUrlHelper(_actionContextAccessor.ActionContext); var model = new SitemapModel(); //prepare common items var commonGroupTitle = await _localizationService.GetResourceAsync("Sitemap.General"); //home page model.Items.Add(new SitemapModel.SitemapItemModel { GroupTitle = commonGroupTitle, Name = await _localizationService.GetResourceAsync("Homepage"), Url = urlHelper.RouteUrl("Homepage") }); //search model.Items.Add(new SitemapModel.SitemapItemModel { GroupTitle = commonGroupTitle, Name = await _localizationService.GetResourceAsync("Search"), Url = urlHelper.RouteUrl("ProductSearch") }); //news if (_newsSettings.Enabled) { model.Items.Add(new SitemapModel.SitemapItemModel { GroupTitle = commonGroupTitle, Name = await _localizationService.GetResourceAsync("News"), Url = urlHelper.RouteUrl("NewsArchive") }); } //blog if (_blogSettings.Enabled) { model.Items.Add(new SitemapModel.SitemapItemModel { GroupTitle = commonGroupTitle, Name = await _localizationService.GetResourceAsync("Blog"), Url = urlHelper.RouteUrl("Blog") }); } //forums if (_forumSettings.ForumsEnabled) { model.Items.Add(new SitemapModel.SitemapItemModel { GroupTitle = commonGroupTitle, Name = await _localizationService.GetResourceAsync("Forum.Forums"), Url = urlHelper.RouteUrl("Boards") }); } //contact us model.Items.Add(new SitemapModel.SitemapItemModel { GroupTitle = commonGroupTitle, Name = await _localizationService.GetResourceAsync("ContactUs"), Url = urlHelper.RouteUrl("ContactUs") }); //customer info model.Items.Add(new SitemapModel.SitemapItemModel { GroupTitle = commonGroupTitle, Name = await _localizationService.GetResourceAsync("Account.MyAccount"), Url = urlHelper.RouteUrl("CustomerInfo") }); //at the moment topics are in general category too if (_sitemapSettings.SitemapIncludeTopics) { var topics = (await _topicService.GetAllTopicsAsync(storeId: (await _storeContext.GetCurrentStoreAsync()).Id)) .Where(topic => topic.IncludeInSitemap); model.Items.AddRange(await topics.SelectAwait(async topic => new SitemapModel.SitemapItemModel { GroupTitle = commonGroupTitle, Name = await _localizationService.GetLocalizedAsync(topic, x => x.Title), Url = urlHelper.RouteUrl("Topic", new { SeName = await _urlRecordService.GetSeNameAsync(topic) }) }).ToListAsync()); } //blog posts if (_sitemapSettings.SitemapIncludeBlogPosts && _blogSettings.Enabled) { var blogPostsGroupTitle = await _localizationService.GetResourceAsync("Sitemap.BlogPosts"); var blogPosts = (await _blogService.GetAllBlogPostsAsync(storeId: (await _storeContext.GetCurrentStoreAsync()).Id)) .Where(p => p.IncludeInSitemap); model.Items.AddRange(await blogPosts.SelectAwait(async post => new SitemapModel.SitemapItemModel { GroupTitle = blogPostsGroupTitle, Name = post.Title, Url = urlHelper.RouteUrl("BlogPost", new { SeName = await _urlRecordService.GetSeNameAsync(post, post.LanguageId, ensureTwoPublishedLanguages: false) }) }).ToListAsync()); } //news if (_sitemapSettings.SitemapIncludeNews && _newsSettings.Enabled) { var newsGroupTitle = await _localizationService.GetResourceAsync("Sitemap.News"); var news = await _newsService.GetAllNewsAsync(storeId: (await _storeContext.GetCurrentStoreAsync()).Id); model.Items.AddRange(await news.SelectAwait(async newsItem => new SitemapModel.SitemapItemModel { GroupTitle = newsGroupTitle, Name = newsItem.Title, Url = urlHelper.RouteUrl("NewsItem", new { SeName = await _urlRecordService.GetSeNameAsync(newsItem, newsItem.LanguageId, ensureTwoPublishedLanguages: false) }) }).ToListAsync()); } //categories if (_sitemapSettings.SitemapIncludeCategories) { var categoriesGroupTitle = await _localizationService.GetResourceAsync("Sitemap.Categories"); var categories = await _categoryService.GetAllCategoriesAsync(storeId: (await _storeContext.GetCurrentStoreAsync()).Id); model.Items.AddRange(await categories.SelectAwait(async category => new SitemapModel.SitemapItemModel { GroupTitle = categoriesGroupTitle, Name = await _localizationService.GetLocalizedAsync(category, x => x.Name), Url = urlHelper.RouteUrl("Category", new { SeName = await _urlRecordService.GetSeNameAsync(category) }) }).ToListAsync()); } //manufacturers if (_sitemapSettings.SitemapIncludeManufacturers) { var manufacturersGroupTitle = await _localizationService.GetResourceAsync("Sitemap.Manufacturers"); var manufacturers = await _manufacturerService.GetAllManufacturersAsync(storeId: (await _storeContext.GetCurrentStoreAsync()).Id); model.Items.AddRange(await manufacturers.SelectAwait(async manufacturer => new SitemapModel.SitemapItemModel { GroupTitle = manufacturersGroupTitle, Name = await _localizationService.GetLocalizedAsync(manufacturer, x => x.Name), Url = urlHelper.RouteUrl("Manufacturer", new { SeName = await _urlRecordService.GetSeNameAsync(manufacturer) }) }).ToListAsync()); } //products if (_sitemapSettings.SitemapIncludeProducts) { var productsGroupTitle = await _localizationService.GetResourceAsync("Sitemap.Products"); var products = await _productService.SearchProductsAsync(0, storeId: (await _storeContext.GetCurrentStoreAsync()).Id, visibleIndividuallyOnly: true); model.Items.AddRange(await products.SelectAwait(async product => new SitemapModel.SitemapItemModel { GroupTitle = productsGroupTitle, Name = await _localizationService.GetLocalizedAsync(product, x => x.Name), Url = urlHelper.RouteUrl("Product", new { SeName = await _urlRecordService.GetSeNameAsync(product) }) }).ToListAsync()); } //product tags if (_sitemapSettings.SitemapIncludeProductTags) { var productTagsGroupTitle = await _localizationService.GetResourceAsync("Sitemap.ProductTags"); var productTags = await _productTagService.GetAllProductTagsAsync(); model.Items.AddRange(await productTags.SelectAwait(async productTag => new SitemapModel.SitemapItemModel { GroupTitle = productTagsGroupTitle, Name = await _localizationService.GetLocalizedAsync(productTag, x => x.Name), Url = urlHelper.RouteUrl("ProductsByTag", new { SeName = await _urlRecordService.GetSeNameAsync(productTag) }) }).ToListAsync()); } return(model); }); //prepare model with pagination pageModel.PageSize = Math.Max(pageModel.PageSize, _sitemapSettings.SitemapPageSize); pageModel.PageNumber = Math.Max(pageModel.PageNumber, 1); var pagedItems = new PagedList <SitemapModel.SitemapItemModel>(cachedModel.Items, pageModel.PageNumber - 1, pageModel.PageSize); var sitemapModel = new SitemapModel { Items = pagedItems }; sitemapModel.PageModel.LoadPagedList(pagedItems); return(sitemapModel); }