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}")); }