Product title in breadcrumb
I am trying to get product titles to show up in the feather breadcrumb widget following the information in the following two links:
http://www.sitefinity.com/blogs/slavo-ingilizovs-blog/2013/01/24/including-item-titles-in-the-sitefinity-breadcrumb
http://docs.sitefinity.com/tutorial-set-virtual-nodes-in-the-breadcrumb-widget
This is for Sitefinity 8.2 / Feather 1.4.450.0
I have a custom mvc widget that displays master/details for Sitefinity e-commerce products. These widgets are being used on hybrid pages and I have verified through debugging and successfully adding the canonical url that the page reference is not null. What else do I need to add into this to register virtual nodes?
The breadcrumb widget has its AllowVirtualNodes property set to true.
Below is the code I have in my custom product controller.
public
ActionResult Index()
ViewBag.CurrentPageUrl =
this
.GetCurrentPageUrl();
return
View(
"Default"
);
public
ActionResult Details(Product productItem)
var viewModel = service.CreateProductDetailsViewModel(productItem);
var page =
this
.HttpContext.CurrentHandler.GetPageHandler();
this
.ProductTitle = productItem.Title;
this
.AddCanonicalUrlTagIfEnabled(page, productItem);
page.RegisterBreadcrumbExtender(
this
);
return
View(viewModel);
public
IEnumerable<SiteMapNode> GetVirtualNodes(SiteMapProvider provider)
return
new
List<SiteMapNode>()
new
SiteMapNode(provider,
"customBreadcrumbKey"
,
"~/url"
,
this
.ProductTitle) ;
Through some help on Google+ (thanks Vesselin) It turns out the issue is that my breadbrumb initializes before the custom controller. What I have done is to create a new widget to be dropped above the breadcrumb.
Here is a working example:
[ControllerToolboxItem(Name =
"ProductBreadcrumbExtender"
, Title =
"Product Breadcrumb Extender"
, SectionName =
"MvcWidgets"
)]
public
class
ProductBreadcrumbController : Controller, IBreadcrumExtender
#region Properties
public
string
ProductTitle
get
;
set
;
#endregion
#region Actions
public
void
Details(Product productItem)
this
.ProductTitle = productItem.Title;
var page =
this
.HttpContext.CurrentHandler.GetPageHandler();
page.RegisterBreadcrumbExtender(
this
);
public
IEnumerable<SiteMapNode> GetVirtualNodes(SiteMapProvider provider)
return
new
List<System.Web.SiteMapNode>()
new
System.Web.SiteMapNode(provider,
"customBreadcrumbKey"
,
"~/url"
,
this
.ProductTitle) ;
#endregion