MonoX support board

Start the conversation, ask questions and share tips and solutions with fellow developers.

Non-registered users can only browse through our support boards. Please register now if you want to post your questions. It takes a second and it is completely free. Alternatively, you can log in without registration using your credentials at major sites such as Google, Microsoft Live, OpenId, Facebook, LinkedIn or Yahoo.

breadcrumbs  (Mono Support )

Viewed 9633 time(s), 2 post(s) 3/15/2012 4:46:15 PMby mk
mk

mk

3/15/2012 4:46:53 PM
I want to use breadcrumbs in my project. is there any option for breadcrumbs?
This content has not been rated yet. 
120 Reputation 9 Total posts
khorvat

khorvat

3/19/2012 3:05:23 PM
Hi,

there is no built-in breadcrumbs navigation in MonoX but you can easily use similar code to one used by the MonoX Simple menu to get the desired functionality. To do so you need to used the following code to fetch the menu structure and then filter out everything by the page is on which you are at the moment.

HierarchyDataCollection<HierarchyData<NavigationMenuItem>> menuDataSource = new HierarchyDataCollection<HierarchyData<NavigationMenuItem>>();
 
Context tree_context = new Context();
                EntityCollection collection = NavigationRepository.GetInstance().GetMenuNavigationItems(tree_context, false);
 
                if (collection.Count > 0)
                {
                    int rootCnt = 0;
                    foreach (NavigationEntity rootP in collection)
                    {
                        if (!rootP.ParentId.HasValue)
                        {
                            NavigationEntity rootPage = (NavigationEntity)tree_context.Get(new NavigationEntityFactory(), rootP.Id);
                            HierarchyData<NavigationMenuItem> nodeHierarchy = GetMenuItems(rootPage, null);
                            if (nodeHierarchy != null)
                            {
                                if (!string.IsNullOrEmpty(RootMenuSeparatorString) && rootCnt > 0)
                                {
                                    NavigationMenuItem separator = new NavigationMenuItem(RootMenuSeparatorString, string.Empty, string.Empty, string.Empty, string.Empty, 0);
                                    HierarchyData<NavigationMenuItem> separatorHierarchy = new HierarchyData<NavigationMenuItem>(separator, null);
                                    menuDataSource.Add(separatorHierarchy);
                                }
                                menuDataSource.Add(nodeHierarchy);
                                rootCnt++;
                            }
                        }
                    }
                }
 
                //Parent page filter
                if (ParentFilterItemId != Guid.Empty)
                {
                    HierarchyDataCollection<HierarchyData<NavigationMenuItem>> newDataSource = new HierarchyDataCollection<HierarchyData<NavigationMenuItem>>();
                    foreach (HierarchyData<NavigationMenuItem> hItem in menuDataSource)
                    {
                        HierarchyData<NavigationMenuItem> parentNode = FindFilterMenuItem(hItem);
                        if (parentNode != null)
                        {
                            HierarchyData<NavigationMenuItem> newRoot = CloneMenuItemTree(parentNode, null);
                            newDataSource.Add(newRoot);
                            menuDataSource.Clear();
                            menuDataSource = newDataSource;
                            break;
                        }
                    }
                }
 
private HierarchyData<NavigationMenuItem> GetMenuItems(NavigationEntity nav, HierarchyData<NavigationMenuItem> parent)
        {
            //navigation entities can have roles attached to them, apart from the roles attached to the pages
            //btw this is the only way to assign roles to navigation containers and external pages
            //navigation role settings override those set on the pages
            if (!SecurityUtility.IsAdmin())
            {
                if (nav.NavigationRoles.Count > 0 && !SecurityUtility.IsUserInRoles(nav.NavigationRoleIds))
                    return null;
            }
 
            NavigationMenuItem nodeItem = new NavigationMenuItem();
 
            nodeItem.Title = LocalizationTextHandler.GetText(nav.NavigationLocalizations, NavigationLocalizationFields.Title, PageLocalizationFields.LanguageId);
            nodeItem.ToolTip = nodeItem.Title.Replace("'",  String.Empty);
            if (this.UseSpanElementsInMenuItems)
                nodeItem.Title = string.Format("<span>{0}</span>", nodeItem.Title);
             
            string url = string.Empty;
            if (String.IsNullOrEmpty(nodeItem.ToolTip))
                return null;
            if (!string.IsNullOrEmpty(nav.ExternalUrl))
            {
                url = LocalizationUtility.RewriteLink(nav.ExternalUrl);
            }
            else if (nav.IsContainerPage)
            { }
            else
            {
                url = LocalizationUtility.RewriteLink(nav.Page.Url);
            }
            url = UrlFormatter.ResolveUrl(url);
             
            nodeItem.Url = url;
            nodeItem.Value = nav.Id.ToString();
 
            HierarchyData<NavigationMenuItem> root = new HierarchyData<NavigationMenuItem>(nodeItem, parent);
            if (nav.ChildNavigationItems.Count > 0 && !ShowRootItemsOnly)
            {
                foreach (NavigationEntity subPage in nav.ChildNavigationItems)
                {
                    HierarchyData<NavigationMenuItem> subNodeItem = GetMenuItems(subPage, root);
                }
            }
            return root;
        }

The above code should guide you on how to fetch the menu structure that should be used in the breadcrumb navigation. To get the current page id your page should inherit from the MonoX BasePage and then you will be able to get the page id with base.PageProperties.Id property.

Note: UI breadcrumb representation is totally up to you, you can use simple repeater to accomplish this. This is only sample code not a working solution.

Let us know if you need anything.

Regards
This content has not been rated yet. 
15993 Reputation 2214 Total posts