1. サイトビルド管理

カタログアイテムのわかりやすいURLを作成する

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

クエリ文字列を使用せずにコンテンツへのURLを作成します。

次の前提条件を満たします。

Visual Sstudioソリューションのセットアップで、次の操作を行います。

  1. 新しいパイプライン プロセッサweb.configファイルをhttpRequestBeginパイプラインの下の /configuration/sitecore/pipelines/httpRequestBeginに作成し、ItemResolverプロセッサの前に挿入します。

    このプロセッサは、特定の形式のURLと関連するアイテムを検索し、そのアイテムにSitecore.Context.Itemを設定します。

    MVCSite.SitecorePipelines
    {
        using Sitecore;
        using Sitecore.Pipelines.HttpRequest;
     
        public class CatalogItemResolver
        {
            public override void Process(PipelineArgs args)
            {
                if (Context.Item == null)
                {
                    return;
                }
     
                // insert item resolver code here
            }
        }
    }
  2. patch configファイルを編集します。

    <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
                <sitecore>
                            <pipelines>
                                        <httpRequestBegin>
                                                    <processor type="MVCSite.SitecorePipelines.CatalogItemResolver, MVCSite" patch:before= "processor[@type='Sitecore.Pipelines.HttpRequest.ItemResolver, Sitecore.Kernel']" />
                                        </httpRequestBegin>
                            </pipelines>
                </sitecore>
    </configuration>
  3. URLをRoutes.

    public virtual CatalogRouteData GetCatalogItemFromIncomingRequest()
    {
        var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(System.Web.HttpContext.Current));
     
        if (routeData != null)
        {
            var data = this.GetRouteDataValue(routeData);
     
            return data;
        }
     
        return null;
    }
     
    public virtual CatalogRouteData GetRouteDataValue(RouteData routeData)
    {
        var data = new CatalogRouteData();
     
        if (routeData.Values.ContainsKey(ItemTypeField))
        {
            data.IsProduct = routeData.Values[ItemTypeField].ToString() == ProductItemType ? true : false;
        }
     
        if (routeData.Values.ContainsKey(IdField))
        {
            data.Id = routeData.Values[IdField].ToString();
        }
     
        if (routeData.Values.ContainsKey(CatalogField))
        {
            data.Catalog = routeData.Values[CatalogField].ToString();
        }
     
        if (string.IsNullOrEmpty(data.Catalog))
        {
            var defaultCatalogItem = Sitecore.Context.Database.GetItem(CommerceConstants.KnownItemIds.DefaultCatalog);
     
            if (defaultCatalogItem != null)
            {
                data.Catalog = defaultCatalogItem[CommerceConstants.KnownFieldIds.CatalogSettingValue];
            }
        }
     
        return data;
    }
  4. SearchNavigation.GetProductまたはSearchNavigation.GetCategory

    Sitecore.Data.Items.Item foundItem = null;
    foundItem = SearchNavigation.GetProduct(routeData.Id, routeData.Catalog);
  5. URLとSitecoreアイテムIDの間のマッピングをキャッシュします。

    ICacheProvider cacheProvider = CommerceTypeLoader.GetCacheProvider(CommerceConstants.KnownCacheNames.FriendlyUrlsCache);
    var id = cacheProvider.GetData<ID>(CommerceConstants.KnownCachePrefixes.Sitecore, CommerceConstants.KnownCacheNames.FriendlyUrlsCache, cachekey);
    if (foundItem != null)
    {
        cacheProvider.AddData<ID>(CommerceConstants.KnownCachePrefixes.Sitecore, CommerceConstants.KnownCacheNames.FriendlyUrlsCache, cachekey, foundItem.ID);
    }
  6. カタログと製品アイテムのリンクを特定の形式でレンダリングする新しいリンク プロバイダーを作成します。

    1. Sitecore LinkProviderから継承し、アイテムが製品またはカテゴリでない場合はベース プロバイダーを呼び出します

      public class MyLinkProvider : LinkProvider
    2. アイテムが製品またはカテゴリであるかどうかを確認するには、SearchHelpers.IsItemProductまたは SearchHelpers.IsItemCategory

      var searchManager = CommerceTypeLoader.CreateInstance<ICommerceSearchManager>();
      if (searchManager.IsItemProduct(item))
      {
          // build and return Product link
      }
      else if (searchManager.IsItemCategory(item))
      {
          // build and return Category link
      }
  7. リンクプロバイダーをインクルードファイルに登録し、新しいデフォルトのリンクプロバイダーとして設定します。

    /configuration/sitecore/linkManager
    <linkManager defaultProvider="sitecore">
          <patch:attribute name="defaultProvider">MyLinkProvider</patch:attribute>
          <providers>
            <add name="MyLinkProvider" addAspxExtension="true" alwaysIncludeServerUrl="false" encodeNames="true" languageEmbedding="asNeeded" languageLocation="filePath" lowercaseUrls="false" shortenUrls="true" useDisplayName="false" type="MySite.SitecorePipelines.MyLinkProvider, MySite"/>
          </providers>
        </linkManager>
この記事を改善するための提案がある場合は、 お知らせください!