예제 #1
0
        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);
        }
예제 #2
0
        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);
        }