2016-07-28 21 views
2

Ich entwickle einen Sprachumschalter für Sitecore-uCommerce-Lösung und verwende den Standard-uCommerce-Item-Resolver und UrlService, um nette URLs zu erhalten. Also habe ich die URLs wie http://sitename/catalogname/productname/c-XX/p-YY.Wie überprüft man, ob Context.Item ein uCommerce-Element oder ein Sitecore-Element ist

Dann für jedes SiteCore 'Seite' Element verwende ich LinkManager.GetItemUrl (Context.Item, Optionen) mit LanguageEmbedding.Always Option.

Jetzt, wenn mein Context.Item ein uCommerce-Artikel ist, dann ist meine URL http://sitename/nl/sitecore/ucommerce/products/3/34/productname/, die nicht von uCommerce Item Resolver abgefangen werden und ich werde das Dokument nicht gefunden Fehler haben.

Also was ich brauche ist zu prüfen, ob Context.Item ist uCommerce Element und URLService anstelle von LinkManager verwenden.

Frage: Gibt es in uCommerce eine Klasse wie TemplateIDs ähnlich wie Sitecore.TemplateIDs? Auf diese Weise konnte ich überprüfen, ob mein Artikel von der Basis-UCommerce-Produktvorlage stammt.

In Verbindung stehende Frage: Wie kann ich Sprache in uCommerce nette URLs einbetten? Hier

ist HttpRequestBegin Pipeline

<httpRequestBegin> 
    <processor type="Sitecore.Pipelines.PreprocessRequest.CheckIgnoreFlag, Sitecore.Kernel"/> 
    <processor type="Sitecore.Pipelines.HttpRequest.EnsureServerUrl, Sitecore.Kernel"/> 
    <processor type="Sitecore.Pipelines.HttpRequest.StartMeasurements, Sitecore.Kernel"/> 
    <processor type="Sitecore.Analytics.Pipelines.HttpRequest.StartDiagnostics,Sitecore.Analytics" patch:source="Sitecore.Analytics.config"/> 
    <processor type="Sitecore.Pipelines.HttpRequest.IgnoreList, Sitecore.Kernel"/> 
    <!-- 
     Ensure registered bundles are ignored by http request pipeline 
     --> 
    <processor type="Sitecore.FXM.Pipelines.HttpRequest.IgnoreBundleEntries, Sitecore.FXM" patch:source="Sitecore.FXM.Bundle.config"/> 
    <!-- Register bundles on their first request --> 
    <processor type="Sitecore.FXM.Pipelines.HttpRequest.OnRequestBundleRegistrarProcessor, Sitecore.FXM" patch:source="Sitecore.FXM.Bundle.config"> 
     <bundles hint="list:AddBundle"> 
      <!-- 
     The FXM client javascript bundle - see registration pipeline below. It requires the current Sitecore instance host name 
         when creating the bundle, so must be generated as part of a Sitecore request. 
     --> 
      <bundle>beacon</bundle> 
     </bundles> 
    </processor> 
    <processor type="Sitecore.Mvc.Pipelines.HttpRequest.DisplayFatalErrors, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/> 
    <processor type="Sitecore.Pipelines.HttpRequest.SiteResolver, Sitecore.Kernel"/> 
    <processor type="Sitecore.ItemWebApi.Pipelines.HttpRequest.SetRuntimeSettings, Sitecore.ItemWebApi" patch:source="Sitecore.ItemWebApi.config"/> 
    <processor type="Sitecore.ItemWebApi.Pipelines.HttpRequest.CheckMode, Sitecore.ItemWebApi" patch:source="Sitecore.ItemWebApi.config"/> 
    <processor type="Sitecore.Pipelines.HttpRequest.UserResolver, Sitecore.Kernel"/> 
    <processor type="Sitecore.ItemWebApi.Pipelines.HttpRequest.ResolveUserFromRequest, Sitecore.ItemWebApi" patch:source="Sitecore.ItemWebApi.config"/> 
    <processor type="Sitecore.ExperienceExplorer.Business.Pipelines.HttpRequest.EnableExperienceModePipeline, Sitecore.ExperienceExplorer.Business" patch:source="Sitecore.ExperienceExplorer.config"/> 
    <processor type="Sitecore.Pipelines.HttpRequest.DatabaseResolver, Sitecore.Kernel"/> 
    <processor type="Sitecore.Pipelines.HttpRequest.BeginDiagnostics, Sitecore.Kernel"/> 
    <processor type="Sitecore.Pipelines.HttpRequest.DeviceResolver, Sitecore.Kernel"/> 
    <processor type="Sitecore.ExperienceExplorer.Business.Pipelines.HttpRequest.PresetResolverPipeline, Sitecore.ExperienceExplorer.Business" patch:source="Sitecore.ExperienceExplorer.config"/> 
    <processor type="Sitecore.ExperienceExplorer.Business.Pipelines.HttpRequest.DevicePipeline, Sitecore.ExperienceExplorer.Business" patch:source="Sitecore.ExperienceExplorer.config"/> 
    <processor type="Sitecore.Pipelines.HttpRequest.LanguageResolver, Sitecore.Kernel"/> 
    <processor type="Sitecore.ItemWebApi.Pipelines.HttpRequest.ResolveLanguage, Sitecore.ItemWebApi" patch:source="Sitecore.ItemWebApi.config"/> 
    <processor type="Sitecore.Pipelines.HttpRequest.CustomHandlers, Sitecore.Kernel"/> 
    <processor type="UCommerce.Sitecore.Pipelines.SetCurrentThreadCultureToCurrentLanguage, UCommerce.Sitecore" patch:source="Sitecore.uCommerce.Pipelines.HttpRequestBegin.config"/> 
    <processor type="UCommerce.Sitecore.Pipelines.BreakHttpProcessor, UCommerce.Sitecore"> 
     <breakMatches hint="raw:AddBreakOnThisPattern" patch:source="Sitecore.uCommerce.Pipelines.HttpRequestBegin.config"> 
      <breakMatch text="/ucommerceapi"/> 
      <breakMatch text="/paymentprocessor"/> 
      <breakMatch text="/paymentrequest"/> 
      <breakMatch text="/clientdependency"/> 
     </breakMatches> 
    </processor> 
    <processor type="UCommerce.Sitecore.Pipelines.BreakAxdExtensionProcessor, UCommerce.Sitecore" patch:source="Sitecore.uCommerce.Pipelines.HttpRequestBegin.config"/> 
    <processor type="Sitecore.Pipelines.HttpRequest.FilterUrlExtensions, Sitecore.Kernel"> 
     <param desc="Allowed extensions (comma separated)">aspx</param> 
     <param desc="Blocked extensions (comma separated)">*</param> 
     <param desc="Blocked extensions that stream files (comma separated)">css,js</param> 
     <param desc="Blocked extensions that do not stream files (comma separated)">*</param> 
    </processor> 
    <processor type="Sitecore.ItemWebApi.Pipelines.HttpRequest.HandleActionRequest, Sitecore.ItemWebApi" patch:source="Sitecore.ItemWebApi.config"/> 
    <processor type="Sitecore.Pipelines.HttpRequest.QueryStringResolver, Sitecore.Kernel"/> 
    <processor type="Sitecore.Pipelines.HttpRequest.DynamicLinkResolver, Sitecore.Kernel"/> 
    <processor type="Sitecore.Pipelines.HttpRequest.AliasResolver, Sitecore.Kernel"/> 
    <processor type="Sitecore.Pipelines.HttpRequest.DefaultResolver, Sitecore.Kernel"/> 
    <processor type="Sitecore.Pipelines.HttpRequest.FileResolver, Sitecore.Kernel"/> 
    <processor type="Sitecore.ExperienceExplorer.Business.Pipelines.HttpRequest.PreviewResolverPipeline, Sitecore.ExperienceExplorer.Business" patch:source="Sitecore.ExperienceExplorer.config"/> 
    <processor type="Sitecore.Pipelines.HttpRequest.ItemResolver, Sitecore.Kernel"/> 
    <processor type="UCommerce.Sitecore.Pipelines.ItemResolver, UCommerce.Sitecore"> 
     <rewriteRules hint="raw:AddRules"> 
      <rule for="categoryProduct" match="(.*)/c-(?'productCatalog'[0-9]+)/c-(?'productCategory'[0-9]+)/p-(?'product'[0-9]+)"/> 
      <rule for="product" match="(.*)/c-(?'productCatalog'[0-9]+)/p-(?'product'[0-9]+)"/> 
      <rule for="category" match="(.*)/c-(?'productCatalog'[0-9]+)/c-(?'productCategory'[0-9]+)"/> 
      <rule for="catalog" match="(.*)/c-(?'productCatalog'[0-9]+)"/> 
     </rewriteRules> 
    </processor> 
    <processor type="Sitecore.Support.Pipelines.HttpRequest.PreviewSiteResolver, Sitecore.Support.321270.321271" patch:source="Sitecore.Support.321270.321271.config"/> 
    <processor type="Sitecore.Mvc.DeviceSimulator.Pipelines.HttpRequest.HandleSimulationRequest, Sitecore.Mvc.DeviceSimulator" patch:source="Sitecore.MvcSimulator.config"/> 
    <processor type="Sitecore.Mvc.Pipelines.HttpRequest.TransferRoutedRequest, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/> 
    <processor type="Sitecore.ItemWebApi.Pipelines.HttpRequest.LaunchRequest, Sitecore.ItemWebApi" patch:source="Sitecore.ItemWebApi.config"/> 
    <processor type="Sitecore.ExperienceExplorer.Business.Pipelines.HttpRequest.ContextItemPipeline, Sitecore.ExperienceExplorer.Business" patch:source="Sitecore.ExperienceExplorer.config"/> 
    <processor type="Sitecore.Pipelines.HttpRequest.DeviceSimulatorResolver, Sitecore.Kernel"/> 
    <processor type="Sitecore.Pipelines.HttpRequest.LayoutResolver, Sitecore.Kernel"/> 
    <processor type="Sitecore.Mvc.Pipelines.HttpRequest.TransferMvcLayout, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/> 
    <processor type="Sitecore.Mvc.Pipelines.HttpRequest.TransferControllerRequest, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/> 
    <processor type="Sitecore.ExperienceEditor.Pipelines.HttpRequest.CheckDevice, Sitecore.ExperienceEditor" patch:source="Sitecore.ExperienceEditor.config"/> 
    <processor type="Sitecore.Pipelines.HttpRequest.PageEditorHandleNoLayout, Sitecore.ExperienceEditor" patch:source="Sitecore.ExperienceEditor.config"/> 
    <processor type="Sitecore.ExperienceExplorer.Business.Pipelines.HttpRequest.ExecuteRequest, Sitecore.ExperienceExplorer.Business" patch:source="Sitecore.ExperienceExplorer.config"/> 
    <processor type="Sitecore.Pipelines.HttpRequest.ExecuteRequest, Sitecore.Kernel"/> 
    <processor type="Sitecore.ContentTesting.Pipelines.HttpRequest.SetReadOnlySessionStateForScreenshot, Sitecore.ContentTesting" patch:source="Sitecore.ContentTesting.config"/> 
</httpRequestBegin> 
+0

können Sie hier hinzufügen httprequestbegin Pipeline –

+0

BTW die uCommerce API verfügbar ist online (wieder): http://www.ucommerce.net/docs/. Je nachdem, wie viele Informationen Sie benötigen, können Sie auch einen Produktbaum in Sitecore (mit zusätzlichen Daten) erstellen, diese mit den uCommerce-Produkten verknüpfen und die Sitecore-Elemente für das Routing verwenden. –

Antwort

2

Wenn es keine bessere Lösung ist, hier ist das, was ich getan habe:

public static class TemplateIDs 
{ 
    // sitecore/ucommerce item's template id  
    public static ID UCommerce => new ID("{AABC1CFA-9CDB-4AE5-8257-799D84A8EE23}"); 
} 

public static class ItemExtensions 
{ 
    public static bool IsUCommerceItem(this Item item) 
    { 
     var items = item.Axes.GetAncestors(); 
     return items.Any(x => x.TemplateID.Equals(TemplateIDs.UCommerce)); 
    } 
} 

//How to use 
if(Sitecore.Context.Item.IsUCommerceItem()) 
{ 
    //Do your stuff 
}