2016-07-28 68 views
2

我正在开发Sitecore-uCommerce解决方案的语言切换,并使用默认的uCommerce Item Resolver和UrlService来获取更好的URL。所以我有这样的网址,例如http://sitename/catalogname/productname/c-XX/p-YY如何检查Context.Item是否uCommerce项目或Sitecore项目

然后,对于每个sitecore'page'项目,我使用LinkManager.GetItemUrl(Context.Item,options)和LanguageEmbedding.Always选项。

现在,如果我的Context.Item是一个uCommerce项目,那么我的URL是http://sitename/nl/sitecore/ucommerce/products/3/34/productname/,它不会被uCommerce Item Resolver捕获,我将找到文档未找到错误。

所以我需要检查之前,如果Context.Item是uCommerce项目,并使用URLService而不是LinkManager。

问题:uCommerce中是否存在类似于Sitecore.TemplateIDs的TemplateID类?通过这种方式,我可以检查我的物品是否来自基本的电子商务产品模板。

相关问题:如何在uCommerce漂亮的URL中嵌入语言?

这里是HttpRequestBegin管道

<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

你能在这里补充httprequestbegin管道 –

+0

BTW的uCommerce API可用在线(再次):http://www.ucommerce.net/docs/。根据您需要多少信息,您还可以在sitecore中制作产品树(使用额外数据),将这些信息与uCommerce产品关联,并使用sitecore项进行路由。 –

回答

2

如果没有更好的解决办法,这里是我做了什么:

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 
} 
相关问题