コード例 #1
0
        /// <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);
        }
コード例 #2
0
ファイル: SiteMaps.cs プロジェクト: moayyaed/YetaWF-Modules
        /// <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"));
            }
        }