public virtual ActionResult EditNode(string code)
 {
     var node = sitemapService.LoadNode(code);
     if (node==null) node=new SitemapItem();
     var editableNode = new SitemapItemEditModel(node);
     return View("EditNode", editableNode);
 }
示例#2
0
        /// <summary>
        /// Tries to write out a change frequency based on the last modified date.
        /// </summary>
        /// <param name="url"></param>
        public void Tiered_LastMod_ChangeFreq(SitemapItem url)
        {
            DateTime now  = DateTime.Today;
            var      span = now - url.LastMod;

            if (span.TotalDays > 30)
            {
                url.changefreq = "monthly";
                url.priority   = "0.6";
            }
            else if (span.TotalDays > 7)
            {
                url.changefreq = "weekly";
                url.priority   = "0.7";
            }
            else if (span.TotalDays > 1)
            {
                url.changefreq = "daily";
                url.priority   = "0.8";
            }
            else if (span.TotalHours > 1)
            {
                url.changefreq = "hourly";
                url.priority   = "0.9";
            }
        }
示例#3
0
        public ActionResult Products()
        {
            var sitemapItems = new List <SitemapItem>();

            String key = String.Format("ProductSitemapItemCache-{0}", StoreId);

            ProductSitemapItemCache.TryGet(key, out sitemapItems);

            if (sitemapItems == null)
            {
                sitemapItems = new List <SitemapItem>();
                var products   = ProductRepository.GetProductByTypeAndCategoryIdFromCache(StoreId, StoreConstants.ProductType, -1);
                var categories = ProductCategoryService.GetProductCategoriesByStoreIdFromCache(StoreId,
                                                                                               StoreConstants.ProductType);
                foreach (var product in products)
                {
                    var cat = categories.FirstOrDefault(r => r.Id == product.ProductCategoryId);
                    if (cat != null)
                    {
                        var productDetailLink = LinkHelper.GetProductIdRouteValue(product, cat.Name);
                        var siteMap           = new SitemapItem(Url.AbsoluteAction("Product", "Products", new { id = productDetailLink }),
                                                                changeFrequency: SitemapChangeFrequency.Monthly, priority: 1.0);
                        sitemapItems.Add(siteMap);
                    }
                }
                ProductSitemapItemCache.Set(key, sitemapItems, MemoryCacheHelper.CacheAbsoluteExpirationPolicy(ProjectAppSettings.CacheLongSeconds));
            }
            return(new SitemapResult(sitemapItems));
        }
示例#4
0
        /// <summary>
        /// Gets Navigation Links for the context navigation panel for the given request URL path.
        /// </summary>
        /// <param name="requestUrlPath">The request URL path.</param>
        /// <param name="localization">The Localization.</param>
        /// <returns>The Navigation Links.</returns>
        public NavigationLinks GetContextNavigationLinks(string requestUrlPath, Localization localization)
        {
            using (new Tracer(requestUrlPath, localization))
            {
                SitemapItem navModel = GetNavigationModel(localization);
                if (!(navModel is TaxonomyNode))
                {
                    // No Navigation Taxonomy found in this Localization; fallback to the StaticNavigationProvider.
                    return(_fallbackNavigationProvider.GetContextNavigationLinks(requestUrlPath, localization));
                }

                SitemapItem contextNode = navModel.FindSitemapItem(requestUrlPath.NormalizePageUrlPath());
                if (contextNode != null && !(contextNode is TaxonomyNode))
                {
                    contextNode = contextNode.Parent;
                }

                List <Link> links = new List <Link>();
                if (contextNode != null)
                {
                    links.AddRange(contextNode.Items.Where(i => i.Visible).Select(i => i.CreateLink(localization)));
                }

                return(new NavigationLinks
                {
                    Items = links
                });
            }
        }
示例#5
0
        public async Task <ActionResult> Brands()
        {
            var sitemapItems = new List <SitemapItem>();

            String key = String.Format("BrandsSiteMap-{0}", StoreId);

            ProductSitemapItemCache.TryGet(key, out sitemapItems);

            if (sitemapItems == null)
            {
                sitemapItems = new List <SitemapItem>();
                var brandsTask = BrandService.GetBrandsAsync(StoreId, null, true);
                await Task.WhenAll(brandsTask);

                var brands = brandsTask.Result;
                foreach (var brand in brands)
                {
                    var brandDetailLink = LinkHelper.GetBrandIdRouteValue(brand);
                    var siteMap         = new SitemapItem(Url.AbsoluteAction("detail", "brands", new { id = brandDetailLink }),
                                                          changeFrequency: SitemapChangeFrequency.Monthly, priority: 1.0);
                    sitemapItems.Add(siteMap);
                }
                ProductSitemapItemCache.Set(key, sitemapItems, MemoryCacheHelper.CacheAbsoluteExpirationPolicy(ProjectAppSettings.CacheLongSeconds));
            }
            return(new SitemapResult(sitemapItems));
        }
示例#6
0
        /// <summary>
        /// Gets Navigation Links for the context navigation panel for the given request URL path.
        /// </summary>
        /// <param name="requestUrlPath">The request URL path.</param>
        /// <param name="localization">The Localization.</param>
        /// <returns>The Navigation Links.</returns>
        public virtual NavigationLinks GetContextNavigationLinks(string requestUrlPath, Localization localization)
        {
            using (new Tracer(requestUrlPath, localization))
            {
                NavigationLinks navigationLinks = new NavigationLinks();
                SitemapItem     sitemapItem     = GetNavigationModel(localization); // Start with Sitemap root Item.
                int             levels          = requestUrlPath.Split('/').Length;
                while (levels > 1 && sitemapItem.Items != null)
                {
                    SitemapItem newParent = sitemapItem.Items.FirstOrDefault(i => i.Type == "StructureGroup" && requestUrlPath.StartsWith(i.Url, StringComparison.InvariantCultureIgnoreCase));
                    if (newParent == null)
                    {
                        break;
                    }
                    sitemapItem = newParent;
                }

                if (sitemapItem != null && sitemapItem.Items != null)
                {
                    foreach (SitemapItem item in sitemapItem.Items.Where(i => i.Visible))
                    {
                        navigationLinks.Items.Add(CreateLink(item));
                    }
                }

                return(navigationLinks);
            }
        }
        //
        // GET: /Sitemap/
        public ActionResult Index()
        {
            var sitemapItems = new List <SitemapItem>();

            var siteMap = new SitemapItem(Url.QualifiedAction("index", "home"),
                                          changeFrequency: SitemapChangeFrequency.Monthly, priority: 1.0);

            sitemapItems.Add(siteMap);
            siteMap = new SitemapItem(Url.QualifiedAction("index", "brands"),
                                      changeFrequency: SitemapChangeFrequency.Monthly, priority: 1.0);
            sitemapItems.Add(siteMap);
            siteMap = new SitemapItem(Url.QualifiedAction("index", "retailers"),
                                      changeFrequency: SitemapChangeFrequency.Monthly, priority: 1.0);
            sitemapItems.Add(siteMap);
            siteMap = new SitemapItem(Url.QualifiedAction("index", "productcategories"),
                                      changeFrequency: SitemapChangeFrequency.Monthly, priority: 1.0);
            sitemapItems.Add(siteMap);

            siteMap = new SitemapItem(Url.QualifiedAction("index", "news"),
                                      changeFrequency: SitemapChangeFrequency.Monthly, priority: 1.0);
            sitemapItems.Add(siteMap);

            siteMap = new SitemapItem(Url.QualifiedAction("index", "blogs"),
                                      changeFrequency: SitemapChangeFrequency.Monthly, priority: 1.0);
            sitemapItems.Add(siteMap);

            siteMap = new SitemapItem(Url.QualifiedAction("index", "photogallery"),
                                      changeFrequency: SitemapChangeFrequency.Monthly, priority: 1.0);
            sitemapItems.Add(siteMap);

            return(new SitemapResult(sitemapItems));
        }
        /// <summary>
        /// Gets Navigation Links for the context navigation panel for the given request URL path.
        /// </summary>
        /// <param name="requestUrlPath">The request URL path.</param>
        /// <param name="localization">The Localization.</param>
        /// <returns>The Navigation Links.</returns>
        public NavigationLinks GetContextNavigationLinks(string requestUrlPath, Localization localization)
        {
            using (new Tracer(requestUrlPath, localization))
            {
                var navModel = GetNavigationModel(localization);
                if (navModel == null)
                {
                    return(null);
                }
                return(SiteConfiguration.CacheProvider.GetOrAdd(
                           $"GetContextNavigationLinks:{requestUrlPath}-{localization.Id}",
                           CacheRegions.DynamicNavigation,
                           () =>
                {
                    SitemapItem contextNode = navModel.FindSitemapItem(requestUrlPath.NormalizePageUrlPath());
                    if (contextNode != null && !(contextNode is TaxonomyNode))
                    {
                        contextNode = contextNode.Parent;
                    }

                    List <Link> links = new List <Link>();
                    if (contextNode != null)
                    {
                        links.AddRange(
                            contextNode.Items.Where(i => i.Visible).Select(i => i.CreateLink(localization)));
                    }

                    return new NavigationLinks
                    {
                        Items = links
                    };
                }));
            }
        }
示例#9
0
        private PageListModel.PageItem MapRecursive(Guid siteId, SitemapItem item, int level, int expandedLevels, IEnumerable <Guid> drafts)
        {
            var model = new PageListModel.PageItem
            {
                Id        = item.Id,
                SiteId    = siteId,
                Title     = item.MenuTitle,
                TypeName  = item.PageTypeName,
                Published = item.Published.HasValue ? item.Published.Value.ToString("yyyy-MM-dd") : null,
                Status    = drafts.Contains(item.Id) ? _localizer.General[PageListModel.PageItem.Draft] :
                            !item.Published.HasValue ? _localizer.General[PageListModel.PageItem.Unpublished] : "",
                EditUrl       = "manager/page/edit/",
                IsExpanded    = level < expandedLevels,
                IsCopy        = item.OriginalPageId.HasValue,
                IsRestricted  = item.Permissions.Count > 0,
                IsScheduled   = item.Published.HasValue && item.Published.Value > DateTime.Now,
                IsUnpublished = !item.Published.HasValue,
                Permalink     = item.Permalink
            };

            foreach (var child in item.Items)
            {
                model.Items.Add(MapRecursive(siteId, child, level + 1, expandedLevels, drafts));
            }
            return(model);
        }
        public void GetNavigationSubtree_FullTaxonomies_Success()
        {
            NavigationFilter testNavFilter = new NavigationFilter {
                DescendantLevels = -1
            };

            SitemapItem[] taxonomyRoots = _testOnDemandNavigationProvider.GetNavigationSubtree(null, testNavFilter, TestFixture.ParentLocalization).ToArray();

            Assert.IsNotNull(taxonomyRoots, "taxonomyRoots");
            OutputJson(taxonomyRoots);

            TaxonomyNode testTaxonomyRoot = GetTestTaxonomy(taxonomyRoots);

            Assert.IsNotNull(testTaxonomyRoot.Items, "testTaxonomyRoot.Items");
            Assert.AreEqual(2, testTaxonomyRoot.Items.Count, "testTaxonomyRoot.Items.Count");

            SitemapItem topLevelKeyword1 = testTaxonomyRoot.Items.FirstOrDefault(i => i.Title == TestFixture.TopLevelKeyword1Title);

            Assert.IsNotNull(topLevelKeyword1, "topLevelKeyword1");
            SitemapItem keyword11 = topLevelKeyword1.Items.FirstOrDefault(i => i.Title == TestFixture.Keyword1_1Title);

            Assert.IsNotNull(keyword11, "keyword11");
            SitemapItem keyword112 = keyword11.Items.FirstOrDefault(i => i.Title == "Keyword 1.1.2");

            Assert.IsNotNull(keyword112, "keyword112");
            Assert.IsNotNull(keyword112.Items, "keyword112.Items");
            Assert.AreEqual(1, keyword112.Items.Count, "keyword112.Items.Count");
        }
        /// <summary>
        /// Gets Navigation Links for the context navigation panel for the given request URL path.
        /// </summary>
        /// <param name="requestUrlPath">The request URL path.</param>
        /// <param name="localization">The Localization.</param>
        /// <returns>The Navigation Links.</returns>
        public virtual NavigationLinks GetContextNavigationLinks(string requestUrlPath, Localization localization)
        {
            using (new Tracer(requestUrlPath, localization))
            {
                // Find the context Sitemap Item; start with Sitemap root.
                SitemapItem contextSitemapItem = GetNavigationModel(localization);
                if (requestUrlPath.Contains("/"))
                {
                    while (contextSitemapItem.Items != null)
                    {
                        SitemapItem matchingChildSg = contextSitemapItem.Items.FirstOrDefault(i => i.Type == SitemapItem.Types.StructureGroup && requestUrlPath.StartsWith(i.Url, StringComparison.InvariantCultureIgnoreCase));
                        if (matchingChildSg == null)
                        {
                            // No matching child SG found => current contextSitemapItem reflects the context SG.
                            break;
                        }
                        contextSitemapItem = matchingChildSg;
                    }
                }

                if (contextSitemapItem.Items == null)
                {
                    throw new DxaException($"Context SitemapItem has no child items: {contextSitemapItem}");
                }

                return(new NavigationLinks
                {
                    Items = contextSitemapItem.Items.Where(i => i.Visible).Select(i => i.CreateLink(localization)).ToList()
                });
            }
        }
示例#12
0
        public SitemapPipeline()
        {
            Dependencies.AddRange(nameof(HomePipeline), nameof(PortfolioPages), nameof(ResumePages));

            ProcessModules = new ModuleList {
                new ReplaceDocuments(Dependencies.ToArray()),
                new SetMetadata(Keys.SitemapItem, Config.FromDocument((doc, _) =>
                {
                    var siteMapItem = new SitemapItem(doc.Destination.FullPath)
                    {
                        LastModUtc = doc.Get <DateTime?>(ContentfulKeys.System.UpdatedAt, null)
                    };

                    if (!siteMapItem.LastModUtc.HasValue)
                    {
                        siteMapItem.LastModUtc      = DateTime.UtcNow;
                        siteMapItem.ChangeFrequency = SitemapChangeFrequency.Weekly;
                    }
                    else
                    {
                        siteMapItem.ChangeFrequency = SitemapChangeFrequency.Monthly;
                    }

                    return(siteMapItem);
                })),

                new GenerateSitemap(),
            };

            OutputModules = new ModuleList {
                new WriteFiles(),
            };
        }
        /// <summary>
        /// Gets Navigation Links for the breadcrumb trail for the given request URL path.
        /// </summary>
        /// <param name="requestUrlPath">The request URL path.</param>
        /// <param name="localization">The Localization.</param>
        /// <returns>The Navigation Links.</returns>
        public virtual NavigationLinks GetBreadcrumbNavigationLinks(string requestUrlPath, Localization localization)
        {
            using (new Tracer(requestUrlPath, localization))
            {
                int levels = requestUrlPath.Split('/').Length;

                SitemapItem currentItem = GetNavigationModel(localization); // Start with Sitemap root.
                List <Link> links       = new List <Link> {
                    currentItem.CreateLink(localization)
                };
                while (levels > 1 && currentItem.Items != null)
                {
                    currentItem = currentItem.Items.FirstOrDefault(i => requestUrlPath.StartsWith(i.Url, StringComparison.InvariantCultureIgnoreCase));
                    if (currentItem == null)
                    {
                        break;
                    }
                    links.Add(currentItem.CreateLink(localization));
                    levels--;
                }

                return(new NavigationLinks
                {
                    Items = links
                });
            }
        }
        private static Url BuildUrl(List <Link> links, SitemapItem sitemapItem, bool languageFallbackEnabled)
        {
            var matchedItem = links.FirstOrDefault(link => link.Item == sitemapItem.Item);

            if (matchedItem == null)
            {
                Logger.Warn(
                    $"Unable to retrieve item from alternate links: {sitemapItem.Item.Paths.FullPath}, language: {sitemapItem.Item.Language.Name}");
                return(null);
            }

            var loc = matchedItem.Href;

            var sitemapGetModifiedDateArgs = new SitemapGetModifiedDateArgs(sitemapItem.Item, DateTime.MinValue, languageFallbackEnabled);

            CorePipeline.Run("sitemap.GetModifiedDate", sitemapGetModifiedDateArgs);

            var lastmod = sitemapGetModifiedDateArgs.LastModified;

            if (lastmod == DateTime.MinValue)
            {
                Logger.Warn(
                    $"No modified date found for item: {sitemapItem.Item.Paths.FullPath}, language: {sitemapItem.Item.Language.Name}");
                return(null);
            }

            var url = new Url
            {
                Loc     = loc,
                Lastmod = lastmod.ToString("yyyy-MM-dd"),
                Link    = links
            };

            return(url);
        }
示例#15
0
    private XElement CreateItemElement(SitemapItem item)
    {
        XElement itemElement = new XElement(nsSitemap + "siteMapNode", new XElement(nsSitemap + "loc", item.Url.ToLower()));

        if (item.LastModified.HasValue)
        {
            itemElement.Add(new XElement(nsSitemap + "lastmod", item.LastModified.Value.ToString("yyyy-MM-dd")));
        }

        if (item.ChangeFrequency.HasValue)
        {
            itemElement.Add(new XElement(nsSitemap + "changefreq", item.ChangeFrequency.Value.ToString().ToLower()));
        }

        if (item.Priority.HasValue)
        {
            itemElement.Add(new XElement(nsSitemap + "priority", item.Priority.Value.ToString(CultureInfo.InvariantCulture)));
        }

        foreach (var alternateLink in item.AlternateLinks)
        {
            itemElement.Add(new XElement(nsXhtml + "link",
                                         new XAttribute("rel", "alternate"),
                                         new XAttribute("hreflang", alternateLink.Language),
                                         new XAttribute("href", alternateLink.Url)));
        }

        return(itemElement);
    }
        /// <summary>
        /// Retrieves a rendered HTML site map
        /// </summary>
        /// <param name="entity">The sitemap entity</param>
        /// <returns>Rendered site map HTML.</returns>
        public virtual ActionResult SiteMap(SitemapItem entity)
        {
            SitemapItem model = SiteConfiguration.NavigationProvider.GetNavigationModel(WebRequestContext.Localization);

            SetupViewData(entity);
            return(View(entity.MvcData.ViewName, model));
        }
示例#17
0
        private List <SitemapItem> GetArchiveItems(Guid id, int level)
        {
            var model = new List <SitemapItem>();
            var posts = api.Posts.GetAll(id).Where(p => p.Published <= DateTime.Now).ToList();

            for (int i = 0; i < posts.Count; i++)
            {
                DynamicPost item   = posts[i];
                var         smItem = new SitemapItem
                {
                    ParentId        = id,
                    SortOrder       = i,
                    Title           = item.Title,
                    NavigationTitle = item.Title,
                    PageTypeName    = item.TypeId,
                    Permalink       = item.Permalink,
                    Published       = item.Published,
                    Created         = item.Created,
                    LastModified    = item.LastModified,
                    Id    = item.Id,
                    Level = level + 1
                };
                model.Add(smItem);
            }
            return(model);
        }
示例#18
0
        public virtual void AssignMeta(SitemapItem url, UrlMetaEntry defaultEntry, UrlMetaEntry overrideEntry)
        {
            //url.priority = LmUtil.EmptyFallback(url.Asset.Raw["xmlsm_priority"], url.Asset.Raw[SitemapConstants.FieldNames.Sitemap_Priority], "");
            url.priority = url.Asset.Raw[SitemapConstants.FieldNames.Sitemap_Priority];

            if (string.IsNullOrEmpty(url.priority))
            {
                if (defaultEntry != null && defaultEntry.Meta != null)
                {
                    url.priority = defaultEntry.Meta.priority.ToString("0.0");
                }
            }

            if (overrideEntry != null && overrideEntry.Meta != null)
            {
                url.priority = overrideEntry.Meta.priority.ToString("0.0");
            }

            //url.changefreq = LmUtil.EmptyFallback(url.Asset.Raw["xmlsm_changefreq"], url.Asset.Raw[SitemapConstants.FieldNames.Sitemap_ChangeFrequency], "");
            url.changefreq = url.Asset.Raw[SitemapConstants.FieldNames.Sitemap_ChangeFreq];

            if (string.IsNullOrEmpty(url.changefreq))
            {
                if (defaultEntry != null && defaultEntry.Meta != null)
                {
                    url.changefreq = defaultEntry.Meta.changefreq;
                }
            }

            if (overrideEntry != null && overrideEntry.Meta != null)
            {
                url.changefreq = overrideEntry.Meta.changefreq ?? "unspecified";
            }
        }
示例#19
0
 private static void FixupSitemapRecursive(List <SitemapItem> toc, bool removePageNodes, bool orderNodes)
 {
     if (toc == null)
     {
         return;
     }
     for (int i = 0; i < toc.Count; i++)
     {
         SitemapItem entry = toc[i];
         if (removePageNodes && entry.Type == "Page")
         {
             toc.RemoveAt(i);
             i--;
             continue;
         }
         if (entry.Url != null)
         {
             // Note the / prefix is important here otherwise the react UI will fail since it splits on / chars.
             entry.Url = $"/{entry.Url.TrimStart('/')}";
         }
         if (entry.Items == null)
         {
             continue;
         }
         if (orderNodes)
         {
             entry.Items = SortSitemapItems(entry.Items);
         }
         FixupSitemap(entry.Items, removePageNodes, orderNodes);
     }
 }
 /// <summary>
 /// Retrieves a Google XML site map
 /// </summary>
 /// <returns>Google site map XML.</returns>
 public virtual ActionResult SiteMapXml()
 {
     using (new Tracer())
     {
         SitemapItem model = SiteConfiguration.NavigationProvider.GetNavigationModel(WebRequestContext.Localization);
         return(View("SiteMapXml", model));
     }
 }
 /// <summary>
 /// Retrieves a JSON site map
 /// </summary>
 /// <returns>Site map JSON.</returns>
 public virtual ActionResult SiteMapJson()
 {
     using (new Tracer())
     {
         SitemapItem model = SiteConfiguration.NavigationProvider.GetNavigationModel(WebRequestContext.Localization);
         return(Json(model, JsonRequestBehavior.AllowGet));
     }
 }
示例#22
0
 /// <summary>
 /// Generates a local url for the given sitemap item.
 /// </summary>
 /// <param name="app">The application service</param>
 /// <param name="item">The sitemap item</param>
 /// <returns>The url</returns>
 public static string Url(this IApplicationService app, SitemapItem item)
 {
     if (item != null)
     {
         return(Url(app, item.Permalink));
     }
     return("");
 }
 private static void AssertProperSitemapItemForPage(SitemapItem pageSitemapItem, string subject)
 {
     StringAssert.Matches(pageSitemapItem.Id, new Regex(@"t\d+-p\d+"), subject + ".Id");
     Assert.AreEqual(SitemapItem.Types.Page, pageSitemapItem.Type, subject + ".Type");
     Assert.IsNotNull(pageSitemapItem.Title, subject + ".Title");
     Assert.IsNotNull(pageSitemapItem.Url, subject + ".Url");
     Assert.IsNotNull(pageSitemapItem.PublishedDate, subject + ".PublishedDate");
     Assert.IsTrue(pageSitemapItem.Visible, subject + ".Visible");
 }
示例#24
0
 public void AddNode(SitemapItem item)
 {
     _articleDbContext.SitemapItems.Add(new SitemapItem()
     {
         Code = item.Code,
         ParentCode = item.ParentCode,
         SortOrder = item.SortOrder
     });
 }
 public SitemapItemEditModel(SitemapItem item)
 {
     Code = item.Code;
     ParentCode = item.ParentCode;
     SortOrder = item.SortOrder;
     Layout = item.Layout;
     RenderOptions = item.RenderOptions;
     RedirectToUrl = item.RedirectToUrl;
     Category = item.Category;
 }
示例#26
0
        public void TestBasicCreatePriorityMinMax()
        {
            var testUri = new Uri("http://example.com");
            var item1   = new SitemapItem(testUri, null, null, 0.0);

            Assert.Equal(0.0, item1.Priority.Value);

            var item2 = new SitemapItem(testUri, null, null, 1.0);

            Assert.Equal(1.0, item2.Priority.Value);
        }
 public void UpdateSiteItem(ref SitemapItem item)
 {
     item.Layout = Layout;
     item.RedirectToUrl = RedirectToUrl;
     item.RenderOptions = RenderOptions;
     item.Category = Category;
     // update also un-editable members
     item.Code = Code;
     item.ParentCode = ParentCode;
     item.SortOrder = SortOrder;
 }
示例#28
0
        public void TestBasicCreate1()
        {
            var testUri = new Uri("http://example.com");
            var item    = new SitemapItem(new Uri("http://example.com"));

            Assert.NotNull(item);
            Assert.Equal(testUri.AbsoluteUri, item.Location.AbsoluteUri);
            Assert.False(item.LastModified.HasValue);
            Assert.False(item.ChangeFrequency.HasValue);
            Assert.False(item.Priority.HasValue);
        }
 /// <summary>
 /// Gets Navigation Links for the top navigation menu for the given request URL path.
 /// </summary>
 /// <param name="requestUrlPath">The request URL path.</param>
 /// <param name="localization">The Localization.</param>
 /// <returns>The Navigation Links.</returns>
 public virtual NavigationLinks GetTopNavigationLinks(string requestUrlPath, Localization localization)
 {
     using (new Tracer(requestUrlPath, localization))
     {
         SitemapItem sitemapRoot = GetNavigationModel(localization);
         return(new NavigationLinks
         {
             Items = sitemapRoot.Items.Where(i => i.Visible).Select(i => RewriteIndexPage(i, sitemapRoot).CreateLink(localization)).ToList()
         });
     }
 }
        /// <summary>
        /// Convert empty URL into a null value for the given <see cref="SitemapItem"/> and its decendants.
        /// </summary>
        private void NullifyEmptyUrl(SitemapItem sitemapItem)
        {
            if (sitemapItem.Url == string.Empty)
            {
                sitemapItem.Url = null;
            }

            foreach (SitemapItem childItem in sitemapItem.Items)
            {
                NullifyEmptyUrl(childItem);
            }
        }
        public XDocument GetSitemapXML(string siteDomain, Sitemap model)
        {
            var posts      = context.Content.Where(c => c.Type.ToLower() == "post" && c.IsDeleted == false && c.isPublished == true).ToList();
            var pages      = context.Content.Where(c => c.Type.ToLower() == "page" && c.IsDeleted == false && c.isPublished == true).ToList();
            var categories = context.Category.Where(c => c.IsDeleted == false).ToList();
            var tags       = context.Label.Where(c => c.IsDeleted == false).ToList();

            var items   = new List <SitemapItem>();
            var homeTag = new SitemapItem(siteDomain + "home/index", DateTime.UtcNow, NITASA.Areas.Admin.Helper.Sitemap.SitemapChangeFrequency.Daily, 1.0);

            items.Add(homeTag);

            foreach (var post in posts)
            {
                items.Add(new SitemapItem(
                              (siteDomain + "content/" + post.URL),
                              (post.ModifiedOn.HasValue ? post.ModifiedOn.Value : (DateTime?)null),
                              (model.postFreqency.HasValue ? model.postFreqency.Value : SitemapChangeFrequency.Never),
                              (model.postPriority.HasValue?model.postPriority.Value:1)));
            }

            foreach (var page in pages)
            {
                items.Add(new SitemapItem(
                              (siteDomain + "content/" + page.URL),
                              (page.ModifiedOn.HasValue ? page.ModifiedOn.Value : (DateTime?)null),
                              (model.postFreqency.HasValue ? model.postFreqency.Value : SitemapChangeFrequency.Monthly),
                              (model.postPriority.HasValue ? model.postPriority.Value : 1)));
            }

            foreach (var cat in categories)
            {
                items.Add(new SitemapItem(
                              (siteDomain + "category/" + cat.Slug),
                              (cat.ModifiedOn.HasValue ? cat.ModifiedOn.Value : (DateTime?)null),
                              (model.postFreqency.HasValue ? model.postFreqency.Value : SitemapChangeFrequency.Monthly),
                              (model.postPriority.HasValue ? model.postPriority.Value : 1)));
            }

            foreach (var tag in tags)
            {
                items.Add(new SitemapItem(
                              (siteDomain + "label/" + tag.Slug),
                              (tag.ModifiedOn.HasValue ? tag.ModifiedOn.Value : (DateTime?)null),
                              (model.postFreqency.HasValue ? model.postFreqency.Value : SitemapChangeFrequency.Monthly),
                              (model.postPriority.HasValue ? model.postPriority.Value : 1)));
            }

            SitemapGenerator generator = new SitemapGenerator();
            var file = generator.GenerateSiteMap(items);

            return(file);
        }
示例#32
0
        public void TestBasicCreateBadPriority()
        {
            var testUri      = new Uri("http://example.com");
            var lastModified = DateTime.UtcNow;

            Assert.Throws <ArgumentOutOfRangeException>(() => new SitemapItem(testUri, lastModified, SitemapChangeFrequency.Hourly, -0.5));
            Assert.Throws <ArgumentOutOfRangeException>(() => new SitemapItem(testUri, lastModified, SitemapChangeFrequency.Hourly, 1.5));

            var item1 = new SitemapItem(testUri, null, null, 0.0);

            Assert.Equal(0.0, item1.Priority.Value);
        }
        public void Transform(Engine engine, Package package)
        {
            _engine  = engine;
            _package = package;

            _config = GetNavigationConfiguration(GetComponent());

            SitemapItem sitemap     = GenerateStructureGroupNavigation(Publication.RootStructureGroup);
            string      sitemapJson = JsonSerialize(sitemap);

            package.PushItem(Package.OutputName, package.CreateStringItem(ContentType.Text, sitemapJson));
        }
示例#34
0
        internal static SitemapItem Convert(ISitemapItem item)
        {
            if (item == null)
            {
                return(null);
            }
            SitemapItem result = null;

            if (item is TaxonomySitemapItem)
            {
                result = new TaxonomyNode();
            }
            else if (item is PageSitemapItem)
            {
                result = new SitemapItem();
            }
            result.Type          = item.Type;
            result.Title         = item.Title;
            result.Id            = item.Id;
            result.OriginalTitle = item.OriginalTitle;
            if (item.Visible.HasValue)
            {
                result.Visible = item.Visible.Value;
            }
            if (item.PublishedDate != null)
            {
                result.PublishedDate = DateTime.ParseExact(item.PublishedDate, "MM/dd/yyyy HH:mm:ss", null);
            }
            result.Url = item.Url;

            if (!(item is TaxonomySitemapItem))
            {
                return(result);
            }
            TaxonomySitemapItem tsi  = (TaxonomySitemapItem)item;
            TaxonomyNode        node = (TaxonomyNode)result;

            node.Key = tsi.Key;
            node.ClassifiedItemsCount = tsi.ClassifiedItemsCount ?? 0;
            node.Description          = tsi.Description;
            node.HasChildNodes        = tsi.HasChildNodes.HasValue && tsi.HasChildNodes.Value;
            node.IsAbstract           = tsi.Abstract.HasValue && tsi.Abstract.Value;
            if (tsi.Items == null || tsi.Items.Count <= 0)
            {
                return(result);
            }
            foreach (var x in tsi.Items)
            {
                result.Items.Add(Convert(x));
            }
            return(result);
        }
示例#35
0
 public virtual ActionResult SaveNode(SitemapItemEditModel editedNode)
 {
     var node = sitemapService.LoadNode(editedNode.Code);
     if (node != null)
     {
         editedNode.UpdateSiteItem(ref node);
         sitemapService.SaveNode(node);
     }
     else
     {
         // create new node
         node = new SitemapItem();
         editedNode.UpdateSiteItem(ref node);
         sitemapService.AddNode(node);
     }
     return Redirect("~/closewin.html");
 }
示例#36
0
 public void SaveNode(SitemapItem item)
 {
     SitemapItem node = _sitemapRepository.LoadNode(item.Code);
     if (node != null)
     {
         node.ParentCode = item.ParentCode;
         node.SortOrder = item.SortOrder;
         node.Layout = item.Layout;
         node.RedirectToUrl = item.RedirectToUrl;
         node.RenderOptions = item.RenderOptions;
         _sitemapRepository.SaveChanges();
     }
 }
示例#37
0
 public void AddNode(SitemapItem node)
 {
     _sitemapRepository.AddNode(node);
     _sitemapRepository.SaveChanges();
 }
示例#38
0
 private void deleteNodeRecursive(SitemapItem root)
 {
     var children = _articleDbContext.SitemapItems.Where(i => i.ParentCode == root.Code).ToList();
     foreach (var child in children)
     {
         deleteNodeRecursive(child);
         _articleDbContext.SitemapItems.Remove(child);
     }
     _articleDbContext.SitemapItems.Remove(root);
 }
示例#39
0
        private void loadChildren(TreeNode<SitemapItem> root)
        {
            List<SitemapItem> items =
                _articleDbContext.SitemapItems.Where(i => i.ParentCode == root.Data.Code)
                    .OrderBy(i => i.SortOrder)
                    .ThenBy(i => i.Code).ToList();

            foreach (SitemapItem sitemapItem in items)
            {
                var child = new SitemapItem(sitemapItem);

                loadChildren(root.AddChild(child));
            }
        }