internal static ISitemapItem GetEntireTree(Sdl.Tridion.Api.Client.ApiClient client, ContentNamespace ns, int pubId, int requestLevels) { ISitemapItem root = client.GetSitemap(ns, pubId, requestLevels, null); if (root == null) { return(null); } List <ISitemapItem> leafNodes = GetLeafNodes(root); while (leafNodes.Count > 0) { TaxonomySitemapItem node = leafNodes[0] as TaxonomySitemapItem; leafNodes.RemoveAt(0); if (!node.HasChildNodes.HasValue || !node.HasChildNodes.Value) { continue; } var subtree = client.GetSitemapSubtree(ns, pubId, node.Id, requestLevels, Ancestor.NONE, null); if (node.Items == null) { node.Items = new List <ISitemapItem>(); } node.Items.AddRange(subtree[0].Items ?? new List <ISitemapItem>()); leafNodes.AddRange(GetLeafNodes(node)); } return(root); }
internal static List <ISitemapItem> GetEntireTree(Sdl.Tridion.Api.Client.ApiClient client, ContentNamespace ns, int pubId, string parentSitemapId, bool includeAncestors, int requestLevels) { var rootsItems = client.GetSitemapSubtree(ns, pubId, parentSitemapId, requestLevels, includeAncestors ? Ancestor.INCLUDE : Ancestor.NONE, null); List <ISitemapItem> roots = rootsItems.Cast <ISitemapItem>().ToList(); if (roots.Count == 0) { return(new List <ISitemapItem>()); } List <ISitemapItem> tempRoots = new List <ISitemapItem>(roots); int index = 0; while (index < tempRoots.Count) { ISitemapItem root = tempRoots[index]; List <ISitemapItem> leafNodes = GetLeafNodes(root); foreach (var item in leafNodes) { TaxonomySitemapItem n = item as TaxonomySitemapItem; var children = client.GetSitemapSubtree(ns, pubId, n.Id, requestLevels, Ancestor.NONE, null); if (children == null) { continue; } n.Items = children[0].Items; List <ISitemapItem> leaves = GetLeafNodes(n); if (leaves == null || leaves.Count <= 0) { continue; } tempRoots.AddRange(leaves.OfType <TaxonomySitemapItem>().Select(x => x)); } index++; } return(roots); }