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.