/// <summary> /// Create a blog based news site map for the current site. /// </summary> public async Task CreateAsync(bool slow = false) { string file = GetTempFile(); await FileSystem.FileSystemProvider.DeleteFileAsync(file); // header await FileSystem.FileSystemProvider.AppendAllTextAsync(file, "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n" + "<urlset xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns =\"http://www.sitemaps.org/schemas/sitemap/0.9\" xmlns:news=\"http://www.google.com/schemas/sitemap-news/0.9\" >\r\n" ); // Dynamic Urls in types DynamicUrlsImpl dynamicUrls = new DynamicUrlsImpl(); List <Type> types = dynamicUrls.GetDynamicUrlTypes(); foreach (Type type in types) { object obj = Activator.CreateInstance(type); ISiteMapDynamicUrls iSiteMap = obj as ISiteMapDynamicUrls; if (iSiteMap != null) { BlogEntryDataProvider blogEntryDP = obj as BlogEntryDataProvider; if (blogEntryDP != null) // limit to blog entries { await iSiteMap.FindDynamicUrlsAsync(AddNewsSiteMapPageAsync, ValidForNewsSiteMap); } } } // end await FileSystem.FileSystemProvider.AppendAllTextAsync(file, "</urlset>\r\n" ); string finalFile = GetFile(); await FileSystem.FileSystemProvider.DeleteFileAsync(finalFile); await FileSystem.FileSystemProvider.MoveFileAsync(file, finalFile); }
/// <summary> /// Creates a site map for the current site. /// </summary> public async Task CreateAsync(bool slow = false) { string file = GetTempFile(); await FileSystem.FileSystemProvider.DeleteFileAsync(file); // header await FileSystem.FileSystemProvider.AppendAllTextAsync(file, "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n" + "<urlset xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns =\"http://www.sitemaps.org/schemas/sitemap/0.9\" >\r\n" ); // Dynamic Urls in types DynamicUrlsImpl dynamicUrls = new DynamicUrlsImpl(); List <Type> types = dynamicUrls.GetDynamicUrlTypes(); foreach (Type type in types) { ISiteMapDynamicUrls iSiteMap = Activator.CreateInstance(type) as ISiteMapDynamicUrls; if (iSiteMap != null) { await iSiteMap.FindDynamicUrlsAsync(AddSiteMapPageAsync, ValidForSiteMap); } } // search all designed modules that have dynamic urls foreach (DesignedModule desMod in await DesignedModules.LoadDesignedModulesAsync()) { ModuleDefinition mod = await ModuleDefinition.LoadAsync(desMod.ModuleGuid, AllowNone : true); if (mod != null) { ISiteMapDynamicUrls iSiteMap = mod as ISiteMapDynamicUrls; if (iSiteMap != null) { await iSiteMap.FindDynamicUrlsAsync(AddSiteMapPageAsync, ValidForSiteMap); } } } // Designed pages List <Guid> pages = await PageDefinition.GetDesignedGuidsAsync(); foreach (Guid pageGuid in pages) { PageDefinition page = await PageDefinition.LoadAsync(pageGuid); if (page == null) { continue; } if (!PagesFound.Contains(page.PageGuid)) // don't include same again (this could be a page that generates dynamic Urls) { await AddUrlAsync(file, page, page.EvaluatedCanonicalUrl, page.Updated, page.SiteMapPriority, page.ChangeFrequency); } } // end await FileSystem.FileSystemProvider.AppendAllTextAsync(file, "</urlset>\r\n" ); string finalFile = GetFile(); await FileSystem.FileSystemProvider.DeleteFileAsync(finalFile); await FileSystem.FileSystemProvider.MoveFileAsync(file, finalFile); if (Manager.CurrentSite.DefaultSiteMap) { await FileSystem.FileSystemProvider.CopyFileAsync(finalFile, Path.Combine(YetaWFManager.RootFolder, "sitemap.xml")); } }