2

デフォルトの Sitecore-uCommerce SEO に適した URL メカニズムを実装していますが、問題が発生しました。

uCommerce の ItemResolver プロセッサを調べましたが、uCommerce が Sitecore コンテキスト アイテムを設定する方法をまだ理解していません。Sitecore.Context.Item に uCommerce Item の 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 アイテムにしたいと考えています。URL のタイプは次のとおりです。

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

uCommerce が実際の Sitecore アイテムを取得して Context.Item として設定する方法を説明していただければ、それで十分だと思います。

4

1 に答える 1

1

あなたは正しい道を進んでいます。

コンテキスト アイテムを他のアイテムに移動します。URL の処理方法が気に入らなかったので、別の ProductResolver が必要です。

Ucommerce は自分のデータベースに製品を持っており、製品を Sitecore に取り込むための dataProvider を作成しました。

Ucommerce 製品は Sitecore の /sitecore/uCommerce/Products にあります。

ショップ、カテゴリ、およびサブカテゴリは、/sitecore/uCommerce/Store の下にあります。

このリンクをチェックして、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 という名前の新しいテンプレートを作成し、ProductPage タイプの Product という名前の新しいアイテムを作成します。

私の要件は、次のような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;
}
于 2016-07-14T11:53:40.693 に答える