首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查Context.Item是uCommerce项目还是Sitecore项目

如何检查Context.Item是uCommerce项目还是Sitecore项目
EN

Stack Overflow用户
提问于 2016-07-28 20:14:10
回答 1查看 248关注 0票数 2

我正在开发一个Sitecore-uCommerce解决方案的语言开关,并使用默认的uCommerce项目解析器和UrlService来获得良好的网址。所以我有像http://sitename/catalogname/productname/c-XX/p-YY这样的URL。

然后,对于每个sitecore‘页面’项目,我使用带有LanguageEmbedding.Always选项的LinkManager.GetItemUrl(Context.Item,选项)。

现在,如果我的Context.Item是一个uCommerce项目,那么我的URL就是http://sitename/nl/sitecore/ucommerce/products/3/34/productname/,它不会被uCommerce项目解析器捕获,并且我会得到document not found错误。

所以我需要做的是检查Context.Item是否为uCommerce项,并使用URLService而不是LinkManager。

问:在uCommerce中是否有类似于Sitecore.TemplateIDs的TemplateIDs类?通过这种方式,我可以检查我的项目是否来自基本的ucommerce产品模板。

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

这是HttpRequestBegin管道

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-28 22:32:26

如果没有更好的解决方案,以下是我所做的:

代码语言:javascript
复制
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 
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38636045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档