在 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;
}
我正在实施默认的 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;
}