在Sitecore-uCommerce中实现SEO友好URL

时间:2016-07-14 09:57:59

标签: sitecore sitecore-ucommerce

我正在实施默认的Sitecore-uCommerce SEO友好网址机制,我遇到了问题。

我查看了uCommerce的ItemResolver处理器,我仍然不明白uCommerce如何设置Sitecore上下文项。它似乎使用了uCommerce Item的Guid for Sitecore.Context.Item。不知何故情况并非如此,但我没有看到真正的Sitecore项目被设置为Context项目。并且uCommerce项目没有关于它们的布局细节。或者我错了吗?

private ID FindSitecoreIdForProduct(int productId)
{
    IRepository<Product> repository = ObjectFactory.Instance.Resolve<IRepository<Product>>();
    Product product = repository.Get(productId);
    if (product != null)
    {
        return new ID(product.Guid);
    }
    return ID.Null;
}

然后它

ID iD = this.FindSitecoreIdForProduct(productId);
if (iD == ID.Null)
{
    return;
}
Context.Item = Context.Database.GetItem(iD);

我希望它是一个特定的Sitecore项目,其中包含一个显示产品详细信息的渲染。 URL的类型为

http://sitename.com/productdetailpage/productname/c-25/p-125

如果您能解释一下uCommerce如何获取真实的Sitecore项目并将其设置为Context.Item,我想这对我来说已经足够了。

1 个答案:

答案 0 :(得分:1)

你是正确的方式。

他们将上下文项目移动到其他项目。我不喜欢他们如何处理网址,我需要其他的ProductResolver。

Ucommerce在他自己的数据库中有产品,他们创建了一个dataProvider来将产品带入Sitecore。

Ucommerce产品位于Sitecore / sitecore / uCommerce / Products下。

商店,类别和子类别位于/ sitecore / uCommerce / Store下。

请检查此链接,以清楚了解ucommerce如何处理网址:

http://docs.ucommerce.net/ucommerce/v7.0/sitecore/working-with-nice-urls-in-sitecore.html

我也有像你一样的问题,我创建了一个自定义的ItemResolver。

我在httpRequestBegin管道上以这种方式定义了处理器。

<processor type="NameSpace.ProductResolver, Assembly" patch:instead="processor[@type='UCommerce.Sitecore.Pipelines.ItemResolver, UCommerce.Sitecore']"/>

我在Sitecore中创建了一个新的模板名称ProductPage,我创建了一个名为Product of ProductPage的新项目

我的要求是有网址:/ Shoes / Running / NIKEAIRZOOMPEGASUS33

当您浏览到/ category / subcategory / productid时,我的productResolver会被触发。

我检查是否存在类别,子类别和产品。

如果存在,我设置当前类别和当前产品。

SiteContext.Current.CatalogContext.CurrentProduct = current_product;    //您需要检查产品是否属于当前类别

我将Context Item设置为Product item

var pathList = args.LocalPath.Split(new[] { '/' },   StringSplitOptions.RemoveEmptyEntries).ToList();


var currentProduct= GetCurrentProduct(pathList);  
// in above function I am getting the current product, checking if is correct category and subcategory
if (currentProduct != null)
{
    SiteContext.Current.CatalogContext.CurrentProduct = currentProduct;
            Sitecore.Context.Item = productItem;
}