More in this section

Forums / Developing with Sitefinity / Getting page level for navigation

Getting page level for navigation

2 posts, 0 answered
  1. Olivier
    Olivier avatar
    14 posts
    Registered:
    28 Sep 2012
    28 Jun 2012
    Link to this post

    Hi all.
    I am designing my side navigation using the Acordion control.
    So far, all is working as expected, but I would like to select in the properties which level I start showing the pages, no matter how deep I am in the structure
    I already have the menu working based on the GUID of a page.

    If I am to show menus starting at level 3 (level 1 being the root of the site, level 2 being the main pages, etc...)
    I need to figure out a way to go up the hierarchy of pages, fin the LEVEL 3 page in the current branch, get it's GUID, and pass it to my menu.
    This way, if I am at any page bellow level 3, I will always get the same menu.

    Is this something dificult to do?

    Thanks for your help.

  2. Olivier
    Olivier avatar
    14 posts
    Registered:
    28 Sep 2012
    28 Jun 2012
    Link to this post
    Actually, I think I figured a way to achieve what I was looking for.
    I first declare a public property for my widget as follows :
    01.//Page level is not 0 based!  1 = the root.
    02.public int PageLevel
    03.{
    04.    get
    05.    {
    06.        return _PageLevel;
    07.    }
    08.    set
    09.    {
    10.        if (value < 1)
    11.        {
    12.            value = 1;
    13.        }
    14.        _PageLevel = value;
    15.    }
    16.}

    Then, I can call the following method to get the desired GUID.
    If the Guid is equal to Guid.Empty, it means that the current page level is too low to get to the proper level.
    01.private Guid GetSiteNavBasePageId()
    02.{
    03.    //We need to go up the chain starting from the current page ID
    04.    //We will try to find the page corresponding to our level specified in PageLevel public property
    05.    //If we are higher in the chain, we return an empty Guid.
    06.    //CurrentPage
    07.    Guid PageId = Telerik.Sitefinity.Web.SiteMapBase.GetActualCurrentNode().Id;
    08.    //Get the Root Guid
    09.    Guid rootId = App.WorkWith().Pages().Get().Single(p => p.Parent == null && p.Title == "Pages").Id;
    10.    //List of Guids starting from the current page
    11.    List<Guid> pageGuidList = new List<Guid>();
    12.    //PlaceHolder for the hierarchy page Guid
    13.    Guid tempPage;
    14.    //Add our current page to the list
    15.    pageGuidList.Add(PageId);
    16.    //Set our temp page to the current page
    17.    tempPage = PageId;
    18.    //Get all pages ID up to ROOT
    19.    while (tempPage != rootId)
    20.    {
    21.        PageNode currentPage = App.WorkWith().Page(tempPage).Get();
    22.        tempPage = currentPage.ParentId;
    23.        pageGuidList.Add(tempPage);
    24.    }
    25.    if (pageGuidList.Count < PageLevel)
    26.    {
    27.        //We have an error - page is higher than the base page
    28.        return Guid.Empty;
    29.    }
    30.    else
    31.    {
    32.        return pageGuidList[pageGuidList.Count - PageLevel];
    33.    }
    34.}

    Hope this will help someone! 
    If you find a better solution, let me know!
2 posts, 0 answered