private static bool IsSitemapItem(Item item, SitemapDefinitionModel sitemapDefinition) { return(item.HasVersion() && item.HasLayout() && (item.IsDerived(Templates.Sitemap.Id) || sitemapDefinition.IncludedTemplates.Contains(item.ID) || sitemapDefinition.IncludedBaseTemplates.Any(item.IsDerived)) && !sitemapDefinition.ExcludedItems.Contains(item.ID)); }
public IEnumerable <SitemapModel> GetSitemapItems(SitemapDefinitionModel sitemapDefinition, SiteContext siteContext) { var sitemapitems = new List <SitemapModel>(); var urlList = new List <string>(); var embedLanguage = sitemapDefinition.EmbedLanguage; var db = Context.Database != null ? Context.Database : Factory.GetDatabase(Sitemap.Constants.WebDatabase); var urlOptions = UrlOptions.DefaultOptions; urlOptions.AlwaysIncludeServerUrl = true; urlOptions.LanguageEmbedding = embedLanguage ? LanguageEmbedding.Always : LanguageEmbedding.Never; var items = db.SelectItems($"fast:{siteContext.StartPath}//*") .Where(i => IsSitemapItem(i, sitemapDefinition)) .ToList(); var dynamicItems = this.GetDynamicWildcardItems(siteContext); items.AddRange(dynamicItems); var startItem = siteContext.GetStartItem(); if (IsSitemapItem(startItem, sitemapDefinition)) { items.Insert(0, startItem); } foreach (var item in items) { var regex = new Regex(@"(\/[A-Za-z0-9]\/)"); var url = LinkManager.GetItemUrl(item, urlOptions); url = regex.Replace(url, "/").ToLowerInvariant(); if (urlList.Contains(url)) { continue; } urlList.Add(url); sitemapitems.Add(new SitemapModel { Url = url, LastModified = item.Statistics.Updated }); } return(sitemapitems); }
public Dictionary <string, SitemapDefinitionModel> GetSitemapDefinitions() { var result = new Dictionary <string, SitemapDefinitionModel>(); foreach (XmlNode node in Sitecore.Configuration.Factory.GetConfigNodes(Constants.SitemapNode)) { var definition = new SitemapDefinitionModel() { SiteName = XmlUtil.GetAttribute(Constants.SiteName, node), EmbedLanguage = MainUtil.GetBool(XmlUtil.GetAttribute(Constants.EmbedLanguage, node), true) }; definition.IncludedBaseTemplates = ParseXml2List(Constants.IncludeBaseTemplates, node); definition.IncludedTemplates = ParseXml2List(Constants.IncludeTemplates, node); definition.ExcludedItems = ParseXml2List(Constants.ExcludeItems, node); result.Add(definition.SiteName, definition); } return(result); }