private IEnumerable <SitemapIndexNode> CreateIndexNode <T>(ISitemapConfiguration <T> configuration, int pageCount) { for (int page = 1; page <= pageCount; page++) { string url = configuration.CreateSitemapUrl(page); SitemapIndexNode indexNode = new SitemapIndexNode { Url = url }; yield return(indexNode); } }
/// <summary> /// Creates a sitemap from a LINQ data source and handles the paging. /// </summary> /// <typeparam name="T">Source item type</typeparam> /// <param name="httpContext">ASP.NET HTTP context.</param> /// <param name="nodes">Data source for creating nodes.</param> /// <param name="configuration">Sitemap configuration for index files.</param> public ActionResult CreateSitemap <T>(HttpContextBase httpContext, IQueryable <T> nodes, ISitemapConfiguration <T> configuration) { if (httpContext == null) { throw new ArgumentNullException(nameof(httpContext)); } if (configuration == null) { throw new ArgumentNullException(nameof(configuration)); } int nodeCount = nodes.Count(); if (configuration.Size >= nodeCount) { return(CreateSitemapInternal(httpContext, nodes.ToList().Select(configuration.CreateNode).ToList())); } if (configuration.CurrentPage.HasValue && configuration.CurrentPage.Value > 0) { int skipCount = (configuration.CurrentPage.Value - 1) * configuration.Size; List <SitemapNode> pageNodes = nodes.Skip(skipCount).Take(configuration.Size).ToList().Select(configuration.CreateNode).ToList(); return(CreateSitemapInternal(httpContext, pageNodes)); } int pageCount = (int)Math.Ceiling((double)nodeCount / configuration.Size); var indexNodes = CreateIndexNode(configuration, pageCount); return(_sitemapActionResultFactory.CreateSitemapResult(httpContext, new SitemapIndexModel(indexNodes))); }
public SitemapBuilderBase(ISitemapConfiguration config) { _config = config; }