Ejemplo n.º 1
0
 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);
     }
 }
Ejemplo n.º 2
0
        /// <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)));
        }
Ejemplo n.º 3
0
 public SitemapBuilderBase(ISitemapConfiguration config)
 {
     _config = config;
 }