コード例 #1
0
        private IEnumerable <BreadcrumbItem> GetHierarchy(TreeNode current, bool addSiteLink, bool showContainers, ref ICollection <string> cacheDependencies)
        {
            // Add current page
            var ret = new List <BreadcrumbItem>();

            ret.Add(new BreadcrumbItem()
            {
                Name          = current.DocumentName,
                Url           = null,
                IsCurrentPage = true
            });
            cacheDependencies.Add($"documentid|{current.DocumentID}");

            // Get all pages on current page path
            var pages = pageRetriever.RetrieveMultiple(query =>
                                                       query.Where(TreePathUtils.GetNodesOnPathWhereCondition(current.NodeAliasPath, false, false))
                                                       );

            // Add current page's parents in loop
            var nodeLevel = current.NodeLevel - 1;

            while (nodeLevel > 0)
            {
                var parent = pages.Where(p => p.NodeLevel == nodeLevel).FirstOrDefault();
                var type   = DataClassInfoProvider.GetDataClassInfo(parent.ClassName);
                if (type != null)
                {
                    if (type.ClassIsCoupledClass ||
                        !type.ClassIsCoupledClass && showContainers)
                    {
                        var url = pageUrlRetriever.Retrieve(parent).AbsoluteUrl;
                        ret.Add(new BreadcrumbItem()
                        {
                            Name = parent.DocumentName,
                            Url  = url
                        });
                    }
                }
                cacheDependencies.Add($"documentid|{current.DocumentID}");

                nodeLevel--;
            }

            // Add link to main domain if needed
            if (addSiteLink)
            {
                ret.Add(new BreadcrumbItem()
                {
                    IsSiteLink = true,
                    Name       = current.Site.DisplayName,
                    Url        = current.Site.SitePresentationURL
                });
                cacheDependencies.Add($"cms.site|byid|{current.Site.SiteID}");
            }

            ret.Reverse();
            return(ret);
        }
    private string GetTreePath()
    {
        // Try get info whether exist linked document in path
        var documentPathContainsLink = DocumentNodeDataInfoProvider.GetDocumentNodes()
                                       .OnSite(SiteContext.CurrentSiteID)
                                       .WhereNotNull("NodeLinkedNodeID")
                                       .Where(TreePathUtils.GetNodesOnPathWhereCondition(Node.NodeAliasPath, false, false))
                                       .Count > 0;

        // If node is not link or none of parent documents is not linked document use document name path
        var treePath = Node.IsLink || documentPathContainsLink ? Node.NodeAliasPath : Node.DocumentNamePath;

        return(TreePathUtils.GetParentPath($"/{treePath}"));
    }