2016-07-14 7 views
2

Ich implementiere eine Standard Sitecore-uCommerce SEO freundliche URLs Mechanik und ich laufe auf Probleme.Implementierung von SEO freundliche URLs in Sitecore-uCommerce

Ich schaute in ItemResolver Prozessor von uCommerce und ich verstehe immer noch nicht, wie uCommerce das Sitecore Context Item setzt. Es scheint, als ob es die Guid-Funktion eines uCommerce-Elements für Sitecore.Context.Item verwendet. Irgendwie ist das nicht der Fall, aber ich sehe nicht, dass das echte Sitecore-Objekt als Kontextelement festgelegt wird. Und uCommerce-Elemente haben nicht die Layout-Details auf ihnen. Oder liege ich falsch?

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

Dann macht es

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

Ich möchte es ein spezifischer Sitecores Artikel mit einem Rendering sein, um die Produktdetails zeigt. Die URLs sind vom Typ

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

Wenn Sie nur mir erklären könnte, wie uCommerce der realen Sitecores Artikel erhält und setzt es als Context.Item, ich denke, es wird für mich genug.

Antwort

1

Sie sind auf dem richtigen Weg.

Sie verschieben das Kontextelement zu einem anderen Element. Ich mochte nicht, wie sie mit URL umgehen, und ich brauche andere ProductResolver.

U-Commerce haben Produkte in seiner eigenen db, und sie erstellt einen DataProvider, um Produkte in Sitecore zu bringen.

Die U-Commerce-Produkte befinden sich in Sitecore unter/sitecore/uCommerce/Products.

Die Shops, Kategorie und Unterkategorie befinden sich unter/sitecore/uCommerce/Store.

Bitte überprüfen Sie diesen Link, um eine saubere Idee zu haben, wie ucommerce mit url beschäftigt:

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

Ich habe auch das gleiche Problem wie du und ich erstellt eine benutzerdefinierte ItemResolver.

Ich definierte Prozessor auf diese Weise auf httpRequestBegin-Pipeline.

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

Ich habe in Sitecore einen neuen Template-Namen Product, ich ein neues Element mit dem Namen Produkt vom Typ erstellen Product

Meine Anforderungen URL zu haben war wie:/Schuhe/Laufen/NIKEAIRZOOMPEGASUS33

Wenn Sie navigieren zu/category/subcategory/productid mein ProductResolver wird ausgelöst.

Ich überprüfe, ob Kategorie, Unterkategorie und Produkt existieren.

Wenn sie existieren, setze ich die aktuelle Kategorie und das aktuelle Produkt.

SiteContext.Current.CatalogContext.CurrentProduct = aktuelles_Produkt; // Sie müssen überprüfen, ob Produkt in der aktuellen Kategorie ist

ich meinen Kontext Artikel ein um das Produkt Artikel

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

Eigentlich uCommerce setzt den uCommerce Artikel als Kontextelement zu sein. So sehr, dass Sie sogar die Layout-Details darauf einstellen können (ich habe es auf die Vorlagen-Standardwerte gesetzt). Dann sollten Sie Vorlagen und uCommerce-Artikel veröffentlichen; und es erstellt tatsächliche Sitecore-Elemente in Web DB. Endlich fange ich sogar an, es zu mögen. Danke für deinen Beitrag, ich werde es als Antwort akzeptieren. –

Verwandte Themen