在 Sitecore-uCommerce 中实施 SEO 友好 URL

Implementing SEO friendly URLs in Sitecore-uCommerce

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

我查看了 uCommerce 的 ItemResolver 处理器,但我仍然不明白 uCommerce 如何设置 Sitecore 上下文项。它似乎使用了 Sitecore.Context.Item 的 uCommerce 项目 Guid。不知怎的,情况并非如此,但我没有看到真正的 Sitecore 项目被设置为上下文项目。而且 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 项目,带有显示产品详细信息的渲染图。网址的类型为

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

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

你走对了。

他们将上下文项目移至其他项目。我不喜欢他们处理 url 的方式,我需要其他 ProductResolver。

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

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

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

请查看此 link 以清楚了解 ucommerce 如何处理 url:

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 的新项目,类型为 ProductPage

我的要求是url喜欢:/Shoes/Running/NIKEAIRZOOMPEGASUS33

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

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

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

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

我将上下文项设置为产品项

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;
}