コード例 #1
0
 public NavigationViewComponent(
     NavigationTreeBuilderService siteMapTreeBuilder,
     IEnumerable <INavigationNodePermissionResolver> permissionResolvers,
     IEnumerable <IFindCurrentNode> nodeFinders,
     IUrlHelperFactory urlHelperFactory,
     IActionContextAccessor actionContextAccesor,
     INodeUrlPrefixProvider prefixProvider,
     ILogger <NavigationViewComponent> logger)
 {
     builder = siteMapTreeBuilder;
     this.permissionResolvers  = permissionResolvers;
     this.nodeFinders          = nodeFinders;
     this.urlHelperFactory     = urlHelperFactory;
     this.actionContextAccesor = actionContextAccesor;
     if (prefixProvider == null)
     {
         this.prefixProvider = new DefaultNodeUrlPrefixProvider();
     }
     else
     {
         this.prefixProvider = prefixProvider;
     }
     log = logger;
 }
コード例 #2
0
        private async Task <TreeNode <NavigationNode> > BuildTreeInternal(NavigationTreeBuilderService service)
        {
            NavigationNode rootNav;

            var project = await projectService.GetCurrentProjectSettings();

            IPage homePage = null;

            if (
                project != null &&
                project.UseDefaultPageAsRootNode &&
                !string.IsNullOrEmpty(project.DefaultPageSlug)
                )
            {
                //make the home page the "root" which contains all the other pages
                homePage = await pageService.GetPageBySlug(project.Id, project.DefaultPageSlug);
            }

            var urlHelper    = urlHelperFactory.GetUrlHelper(actionContextAccesor.ActionContext);
            var folderPrefix = prefixProvider.GetPrefix();

            if ((homePage != null) && project.UseDefaultPageAsRootNode)
            {
                rootNav            = new NavigationNode();
                rootNav.IsRootNode = true;
                rootNav.Key        = homePage.Id;
                rootNav.Text       = homePage.Title;
                rootNav.Url        = pageRouteHelper.ResolveHomeUrl(urlHelper, folderPrefix); // urlHelper.Content("~/" + folderPrefix);
            }
            else
            {
                rootNav            = new NavigationNode();
                rootNav.IsRootNode = true;
                rootNav.Key        = "pagesRoot";
                rootNav.Title      = "Home";
                rootNav.Text       = "Home";
                rootNav.Url        = pageRouteHelper.ResolveHomeUrl(urlHelper, folderPrefix); // rootNav.Url = urlHelper.Content("~/" + folderPrefix);
                //rootNav.ChildContainerOnly = true;
            }



            var treeRoot = new TreeNode <NavigationNode>(rootNav);

            var rootList = await pageService.GetRootPages().ConfigureAwait(false);

            var rootListCount = rootList.Count();
            var blogPosition  = project.BlogPagePosition;

            if (project.AddBlogToPagesTree)
            {
                if (blogPosition > rootListCount)
                {
                    blogPosition = rootListCount;
                }
            }

            var didAddBlog = false;

            if (rootListCount <= 1)
            {   // if there are no pages we won't hit the loop below so go ahead and add the blog page
                if (project.AddBlogToPagesTree)
                {
                    var node = new NavigationNode();
                    node.Key       = project.BlogPageText;
                    node.ParentKey = "RootNode";
                    node.Text      = project.BlogPageText;
                    if (project.BlogMenuLinksToNewestPost)
                    {
                        node.Action     = "MostRecent";
                        node.Controller = "Blog";
                        node.Url        = urlHelper.Action("MostRecent", "Blog");
                    }
                    else
                    {
                        node.Action     = "Index";
                        node.Controller = "Blog";
                        node.Url        = urlHelper.Action("Index", "Blog");
                    }

                    node.ComponentVisibility = project.BlogPageNavComponentVisibility;
                    var blogNode = treeRoot.AddChild(node);
                    didAddBlog = true;
                }
            }


            //rootList.Insert()
            var rootPosition = 1;

            foreach (var page in rootList)
            {
                var node = new NavigationNode();
                if (!didAddBlog && (project.AddBlogToPagesTree && rootPosition == blogPosition))
                {
                    node.Key       = project.BlogPageText;
                    node.ParentKey = "RootNode";
                    node.Text      = project.BlogPageText;
                    if (project.BlogMenuLinksToNewestPost)
                    {
                        node.Action     = "MostRecent";
                        node.Controller = "Blog";
                        node.Url        = urlHelper.Action("MostRecent", "Blog");
                    }
                    else
                    {
                        node.Action     = "Index";
                        node.Controller = "Blog";
                        node.Url        = urlHelper.Action("Index", "Blog");
                    }
                    node.ComponentVisibility = project.BlogPageNavComponentVisibility;
                    var blogNode = treeRoot.AddChild(node);

                    node = new NavigationNode(); // new it up again for use below
                }

                if (project.UseDefaultPageAsRootNode && (homePage != null && homePage.Id == page.Id))
                {
                    rootPosition += 1;
                    await AddChildNodes(treeRoot, project, folderPrefix).ConfigureAwait(false);

                    continue;
                }

                node.Key       = page.Id;
                node.ParentKey = page.ParentId;
                node.Text      = page.Title;
                node.ViewRoles = page.ViewRoles;
                if (string.IsNullOrEmpty(folderPrefix))
                {
                    node.Url = urlHelper.RouteUrl(pageRouteHelper.PageIndexRouteName, new { slug = page.Slug });
                }
                else
                {
                    node.Url = urlHelper.RouteUrl(pageRouteHelper.FolderPageIndexRouteName, new { slug = page.Slug });
                }

                // for unpublished pages PagesNavigationNodePermissionResolver
                // will look for projectid in CustomData and if it exists
                // filter node from view unless user has edit permissions
                if (!page.IsPublished)
                {
                    node.CustomData = project.Id;
                }

                var treeNode = treeRoot.AddChild(node);
                await AddChildNodes(treeNode, project, folderPrefix).ConfigureAwait(false);

                rootPosition += 1;
            }

            return(treeRoot);
        }
コード例 #3
0
        private async Task <TreeNode <NavigationNode> > BuildTreeInternal(NavigationTreeBuilderService service)
        {
            NavigationNode rootNav;

            var project = await _projectService.GetCurrentProjectSettings();

            IPage homePage = null;

            if (
                project != null &&
                project.UseDefaultPageAsRootNode &&
                !string.IsNullOrEmpty(project.DefaultPageSlug)
                )
            {
                //make the home page the "root" which contains all the other pages
                homePage = await _pageService.GetPageBySlug(project.DefaultPageSlug);
            }

            var rootList = await _pageService.GetRootPages().ConfigureAwait(false);

            var rootListCount = rootList.Count();

            var urlHelper = _urlHelperFactory.GetUrlHelper(_actionContextAccesor.ActionContext);

            //var folderPrefix = _prefixProvider.GetPrefix();
            if ((homePage != null) && project.UseDefaultPageAsRootNode)
            {
                rootNav = new NavigationNode
                {
                    Key                 = homePage.Id,
                    Text                = homePage.Title,
                    CreatedUtc          = homePage.CreatedUtc,
                    LastModifiedUtc     = homePage.LastModified,
                    ComponentVisibility = homePage.MenuFilters,
                    ViewRoles           = homePage.ViewRoles,
                    Url                 = urlHelper.RouteUrl(_pageRoutes.PageRouteName, new { slug = "" }) //_pageRouteHelper.ResolveHomeUrl(urlHelper, folderPrefix) // urlHelper.Content("~/" + folderPrefix);
                };
            }
            else
            {
                rootNav = new NavigationNode
                {
                    Key   = "pagesRoot",
                    Title = "Home",
                    Text  = "Home",
                    Url   = urlHelper.RouteUrl(_pageRoutes.PageRouteName, new { slug = "" })
                };
            }

            var treeRoot = new TreeNode <NavigationNode>(rootNav);


            var blogPosition = project.BlogPagePosition;

            if (project.AddBlogToPagesTree)
            {
                if (blogPosition > rootListCount)
                {
                    blogPosition = rootListCount;
                }
            }

            var didAddBlog = false;

            if (rootListCount <= 1)
            {   // if there are no pages we won't hit the loop below so go ahead and add the blog page
                if (project.AddBlogToPagesTree)
                {
                    var node = new NavigationNode
                    {
                        Key  = project.BlogPageText,
                        Text = project.BlogPageText
                    };
                    if (project.BlogMenuLinksToNewestPost)
                    {
                        node.NamedRoute = _blogRoutes.MostRecentPostRouteName;
                        node.Url        = urlHelper.RouteUrl(_blogRoutes.MostRecentPostRouteName);
                    }
                    else
                    {
                        node.NamedRoute = _blogRoutes.BlogIndexRouteName;
                        node.Url        = urlHelper.RouteUrl(_blogRoutes.BlogIndexRouteName);
                        node.ExcludeFromSearchSiteMap = true;
                    }

                    node.ComponentVisibility = project.BlogPageNavComponentVisibility;
                    var blogNode = treeRoot.AddChild(node);
                    didAddBlog = true;
                }
            }

            var rootPosition = 1;

            foreach (var page in rootList)
            {
                var node = new NavigationNode();
                if (!didAddBlog && (project.AddBlogToPagesTree && rootPosition == blogPosition))
                {
                    node.Key = project.BlogPageText;
                    //node.ParentKey = "RootNode";
                    node.Text = project.BlogPageText;
                    if (project.BlogMenuLinksToNewestPost)
                    {
                        node.NamedRoute = _blogRoutes.MostRecentPostRouteName;
                        node.Url        = urlHelper.RouteUrl(_blogRoutes.MostRecentPostRouteName);
                    }
                    else
                    {
                        node.NamedRoute = _blogRoutes.BlogIndexRouteName;
                        node.Url        = urlHelper.RouteUrl(_blogRoutes.BlogIndexRouteName);
                        node.ExcludeFromSearchSiteMap = true;
                    }
                    node.ComponentVisibility = project.BlogPageNavComponentVisibility;
                    var blogNode = treeRoot.AddChild(node);

                    node = new NavigationNode(); // new it up again for use below
                }

                if (project.UseDefaultPageAsRootNode && (homePage != null && homePage.Id == page.Id))
                {
                    rootPosition += 1;
                    await AddChildNodes(treeRoot, project, urlHelper).ConfigureAwait(false);

                    continue;
                }

                node.Key = page.Id;
                //node.ParentKey = page.ParentId;
                node.Text                = page.Title;
                node.ViewRoles           = page.ViewRoles;
                node.ComponentVisibility = page.MenuFilters;
                node.CreatedUtc          = page.CreatedUtc;
                node.LastModifiedUtc     = page.LastModified;
                SetUrl(node, page, urlHelper);

                // for unpublished pages PagesNavigationNodePermissionResolver
                // will look for projectid in CustomData and if it exists
                // filter node from view unless user has edit permissions
                if (!page.HasPublishedVersion())
                {
                    node.CustomData = project.Id;
                }

                var treeNode = treeRoot.AddChild(node);
                await AddChildNodes(treeNode, project, urlHelper).ConfigureAwait(false);

                rootPosition += 1;
            }

            return(treeRoot);
        }
コード例 #4
0
 public Breadcrumbs(IServiceProvider services, NavigationTreeBuilderService builderService)
 {
     _builderService = builderService;
     _factory        = services.GetRequiredService <IUrlHelperFactory>();
 }