ウォークスルー
、内容リゾルバをレンダリングする方法

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

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

!重要以前にアプリを統合していた場合、それは旧版のASP.NETコアレンダリングSDK(バージョン22以前)を使用しています。このSDKは更新を受け取っていないため、最新のバージョンへのアップグレード をお勧めします。

Sitecore Layout Serviceと共にコンテンツリゾルバーを使って、コンポーネントデータソースのシリアライズを超えたより複雑なデータを提供します。一般的なユースケースには、サイトナビゲーション、検索結果、カスタムビジネスロジックの出力や状態の返還などがあります。このウォークスルーでは、モデルバウンドビューでレンダリングするためのコンテンツツリーのモデルを返す内容リボルバの作成方法を学びます。

ウォークスルーを終えたら、ビジネスドメインごとにソリューションを整理し、複数のサービスからの関連コードの共通クロージャーを作成するSitecore Helixプラクティスに慣れておくことをお勧めします。これにより、関連するコンテンツリゾルバやレンダリングコードをソリューション内に共存できます。インスピレーションはSitecore Helix例リポジトリをご覧ください。

!注このドキュメントは 、Getting Startedテンプレートを使用している か、Content ManagementとContent DeliveryインスタンスのPlatformプロジェクト、RenderingHostプロジェクトを含む動作するSitecoreソリューションを持っていることを前提としています。

Getting Startedテンプレートのアイテムやプロジェクトの公開、実行、テスト方法をご覧ください。

contentsリゾルバを作成するには、以下の手順を踏み込む必要があります:

  • Sitecoreを追加してください。LayoutService NuGetパッケージ。
  • テンプレートクラスを追加してください。
  • contents リゾルバクラスを作成します。
  • contents リゾルバ項目を作成します。
  • JSONレンダリングアイテムを作成します。
  • JSONレンダリングアイテムを標準的なモデルの値に AppRoute 追加します。
  • 内容物リゾルバをテストしてください。

目次リゾルバをレンダリングするモデルバウンドビューを作成するには、以下の手順を踏む必要があります。

  • モデルを作成しましょう。
  • モデルバウンドビューを作成します。
  • モデルバウンドビューを登録します。
  • モデルバウンドビューをテストします。

Sitecoreを追加してください。LayoutService NuGetパッケージ

Sitecore.LayoutService NuGetパッケージには、contentsリゾルバクラスが継承するSitecore.LayoutService.ItemRendering.ContentsResolvers.RenderingContentsResolverクラスが含まれています。

Sitecore.LayoutService NuGetパッケージをPlatformプロジェクトに追加するには:

  1. Visual Studio、Solution Explorerで右クリック Platform/References から 「パッケージ管理」NuGetクリックしてください。
  2. ウィンドウ右上隅の 「パッケージソース 」メニューで、 https://nuget.sitecore.com/resources/v3/index.jsonを指すパッケージソースを選択します。
  3. ウィンドウの左上に「 ブラウズ 」をクリックして、Sitecore.LayoutService NuGetパッケージを検索してください。
  4. 検索結果一覧でSitecore.LayoutServiceをクリックしてください。
  5. ウィンドウの右側で 「インストール 」をクリックしてSitecore.LayoutService NuGetパッケージをダウンロードしてインストールします。
  6. 必要に応じてNugetパッケージマネージャーがソリューションを修正できるようにします。

テンプレートクラスを追加

Templatesクラスはcontentsリsolverクラスの依存関係です。

TemplatesクラスをPlatformプロジェクトに追加するには:

  1. Visual Studio、Solution Explorerでは右クリックでPlatformを右クリックし、「 追加新しいアイテム」をクリックします。

  2. 新しいアイテムを追加」 ダイアログで:

    • 左側のペインで Installed/Visual C#/ASP.NET Core/Codeをクリックします。
    • 中央のパネルで「 クラス」をクリックします。
    • 下部の 「Name 」欄で「 Templates.cs 」を入力し、「 追加」をクリックします。
  3. クラスファイルに以下の内容を追加します:

    using Sitecore.Data;

    namespace MyProject { public static class Templates { public static class SiteRoot { public static readonly ID Id = ID.Parse("{061CBA15-5474-4B91-8A06-17903B102B82}"); }

    public static class AppRoute { public static readonly ID Id = ID.Parse("{89829df8-93ee-56be-b57a-8f9efa6ba0a6}");

    public static class Fields { public static readonly ID PageTitle = ID.Parse("{09265946-b966-5034-bad7-94e0d935147a}"); } } } }

  4. クラスファイルを保存してください。

contentsリゾルバクラスを作成します

contentsリゾルバクラスはSitecore.LayoutService.ItemRendering.ContentsResolvers.RenderingContentsResolverクラスのResolveContentsメソッドを上書きし、コンテンツツリーオブジェクトを返します。

!重要ResolveContentsメソッドは、レンダリングホストにJSONレンダリングとして返せるオブジェクトを返さ なければなりません

Platformプロジェクトで内容リゾルバクラスを作成するには:

  1. Visual Studio、Solution Explorerでは右クリックでPlatformを右クリックし、「 追加新しいアイテム」をクリックします。

  2. 「新しいアイテムを追加」ウィンドウで:

    • 左側のペインで Installed/Visual C#/ASP.NET Core/Codeをクリックします。
    • 中央のパネルで「 クラス」をクリックします。
    • 下部の 「Name 」欄で「 NavigationContentsResolver.cs 」を入力し、「 追加」をクリックします。
  3. クラスファイルに以下の内容を入力してください:

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sitecore.Abstractions; using Sitecore.Data.Items; using Sitecore.LayoutService.Configuration; using Sitecore.LayoutService.ItemRendering.ContentsResolvers; using Sitecore.Mvc.Presentation;

    namespace MyProject.LayoutService { public class NavigationContentsResolver : RenderingContentsResolver { private const int NavigationDepth = 2;

    private readonly BaseLinkManager _linkManager;

    public NavigationContentsResolver(BaseLinkManager linkManager) { _linkManager = linkManager; }

    public override object ResolveContents(Rendering rendering, IRenderingConfiguration renderingConfig) { var contextItem = GetContextItem(rendering, renderingConfig); var siteRoot = contextItem?.Axes.GetAncestors().FirstOrDefault(item => item.DescendsFrom(Templates.SiteRoot.Id)); if (siteRoot == null) { return null; }

    // First page under our site root should be Home return GetNavigation(siteRoot, NavigationDepth).FirstOrDefault(); }

    private IEnumerable GetNavigation(Item parent, int depth) { depth--; return parent.Children .Where(item => item.DescendsFrom(Templates.AppRoute.Id)) .Select(item => new { Title = itemTemplates.AppRoute.Fields.PageTitle, Url = _linkManager.GetItemUrl(item), Children = depth >= 0 ? GetNavigation(item, depth) : new object0 }); } } }

  4. クラスファイルを保存してください。

  5. Platformプロジェクトを右クリックして「公開」をクリックします。

  6. プラットフォームウィンドウで「公開」をクリックして、Sitecore Content ManagementとContent DeliveryインスタンスでPlatformプロジェクトを公開します。

  7. !ヒント

    • ナビゲーション内容リゾルバは、現在またはアクティブなナビゲーション項目(ナビゲーションメニューでアクティブなナビゲーション項目をハイライトするなど)にSitecore.Context.Itemや他のページ固有のコンテキストを使わないようにしなければなりません。これはクライアント側で扱う方が適しており、ページ間でナビゲーションデータをキャッシュできることを保証します。

    • 可能な限り、Sitecoreクエリや他のリソースのかかるコンテンツツリーナビゲーションの代わりに、コンテンツSearch Sitecoreを活用しましょう。

    contentsリゾルバ項目を作成

    contentsリゾルバの項目は、contentsリゾルバクラスをSitecoreにリンクします。

    Sitecoreインスタンスでコンテンツリゾルバ項目を作成するには:

    1. コンテンツエディターで右クリック /sitecore/System/Modules/Layout Service/Rendering Contents Resolversから 挿入内容解析のレンダリングをクリックします。

      !ヒントシリアライズを最適化するために、コンテンツリゾルバをフォルダに整理できます。

    2. メッセージダイアログのName欄でNavigation Resolverを入力し、OKをクリックします。

    3. Navigation Resolver項目のコンテンツタブのデータセクションのタイプフィールドで、内容リゾルバの名前を入力してください:

      MyProject.LayoutService.NavigationContentsResolver, MyProject

    4. コンテンツツリーモデルを構築する際に、コンテンツリゾルバが現在のアイテム(Sitecoreコンテキストページ/ルート)に対してコンテンツツリーをナビゲートさせるには 「コンテキストアイテム使用 」を選択してください。このチェックボックスを選択しない場合、コンテンツリゾルバはデータソースアイテムを使用します。

    5. contentsリゾルバの項目を保存してください。

    JSONレンダリングアイテムを作成します

    JSONレンダリングアイテムは、コンテンツリゾルバクラス(コンテンツツリーオブジェクト)の出力をレンダリングホスト用のJSON形式データとしてレンダリングします。

    SitecoreインスタンスでJSONレンダリングアイテムを作成するには:

    1. コンテンツエディターで右クリック /sitecore/Layout/Renderings を選び、「 挿入JSONレンダリング」をクリックします。
    2. メッセージダイアログのName欄でNavigation Renderingを入力し、OKをクリックします。
    3. Navigation Renderingアイテムのコンテンツタブ、レイアウトサービスのセクション、Rendering Contents Resolverドロップダウンリストで、ナビゲーションリゾルバアイテムをクリックします。
    4. JSONレンダリングアイテムを保存してください。

    !ヒント可能であれば、コンテンツリゾルバーを使用するレンダリングに対して出力キャッシュを設定しましょう。これは特にナビゲーションなど多くの項目にアクセスするレンダリングで重要です。

    JSONレンダリングアイテムをAppRouteテンプレートの標準値に追加します

    AppRouteテンプレートの標準値にレンダリングアイテムJSONを追加することで、AppRouteテンプレートから継承するすべてのページにJSONレンダリングが含まれています。

    JSONレンダリングアイテムをテンプレートの標準値に追加するには、AppRoute :

    1. コンテンツエディターで /sitecore/Templates/Project/MyProject/AppRoute/__Standard Valuesをクリックします。
    2. プレゼンテーションタブで詳細をクリックしてください。
    3. レイアウト詳細ダイアログのデフォルトセクションで編集をクリックします。
    4. デバイスエディターのダイアログのレイアウトタブでLayouts/Project/MyProject/Mainを選択します。
    5. コントロールタブで「追加」をクリックします。
    6. レンダリングを選択する 」ダイアログで Renderings/Navigation Renderingをクリックします。
    7. 「プレイスホルダーに追加」フィールドで「Main」をクリックし、「選択」をクリックします。
    8. デバイスエディターのダイアログでOKをクリックします。
    9. レイアウト詳細ダイアログでOKをクリックします。

    contentsリゾルバのテスト

    モデルバウンドビューを始める前に、Sitecoreレイアウトサービスがレンダリングホストへの出力にJSONレンダリングを含むかどうかをテストしてください。

    Getting Startedテンプレートのアイテムやプロジェクトの公開、実行、テスト方法をご覧ください。

    レンダリングエンジンの設定によっては、レンダリングホストページがUnknown componentやそれに類するメッセージを出力することがあります。これはごく普通のことです。

    このJSONレンダリングのサンプルでは、ナビゲーションモデルを埋めるためのコンテンツツリーにいくつかの項目を追加しました:

    { "uid":"19ea6f2e-3ab9-4e9d-b3a6-9a0e5a6e9d0a", "componentName":"Navigation Rendering", "dataSource":"", "params":{}, "fields":{ "title":"Welcome to Sitecore", "url":"/en/", "children": { "title":"Main Nav 1", "url":"/en/MainNav1", "children": { "title":"Child Nav 1", "url":"/en/MainNav1/ChildNav1", "children": }, { "title":"Child Nav 2", "url":"/en/MainNav1/ChildNav2", "children": }

    }, { "title":"Main Nav 2", "url":"/en/MainNav2", "children": { "title":"More Child Nav", "url":"/en/MainNav2/MoreChildNav", "children": }

    }, { "title":"Main Nav 3", "url":"/en/MainNav3", "children": }

    } }

    モデルの作成

    このモデルは、Sitecoreレイアウトサービスから返されるJSONレンダリングの内容リゾルバのデータにマッピングする強型クラスを提供します。

    RenderingHostプロジェクトでモデルを作成するには:

    1. Visual Studio、Solution Explorerでは右クリックでRenderingHost/Modelsを右クリックし、「 追加新しいアイテム」をクリックします。

    2. 「新しいアイテムを追加」ウィンドウで:

      • 左側のペインで Installed/Visual C#/ASP.NET Core/Codeをクリックします。
      • 中央のパネルで「 クラス」をクリックします。
      • 名前 欄の 下部で NavigationModel.csを入力してください。
      • 追加をクリックします。
    3. クラスファイル内で、JSONレンダリングをモデルにバインドするには、以下のコンテンツを追加してください:

      using System.Collections.Generic; using Sitecore.AspNet.RenderingEngine.Binding.Attributes;

      namespace MyProject.Models { public class NavigationModel { SitecoreComponentField public string Title { get; set; }

      SitecoreComponentField public string Url { get; set; }

      SitecoreComponentField public IEnumerable Children { get; set; } } }

      !注Sitecoreフィールドに直接バインディングしないため、モデル内でstringのような単純な型を使うことはできますが、それらを明示的にSitecoreComponentFieldで帰属させる必要があります。

    4. クラスファイルを保存してください。

    モデルバウンドビューを作成する

    モデルバウンドビューはモデルデータをHTMLとしてレンダリングします。

    RenderingHostプロジェクトでモデルバウンドビューを作成するには:

    1. Visual Studio、Solution Explorerでは右クリックでRenderingHost/Views/Shared/Components/SitecoreComponentを右クリックし、「 追加新しいアイテム」をクリックします。

    2. 「新しいアイテムを追加」ウィンドウで:

      • 左側のペインでInstalled/Visual C#/ASP.NET Core/Webをクリックします。

      • 中央のペインで「 Razor View」をクリックします。

      • 名前 欄の 下部でNavigation Rendering.cshtmlを入力してください。

        !重要モデルバウンドビューファイルの名前がJSONレンダリングの名前と一致しない場合、Unknown Componentエラーが発生します。

      • 追加をクリックします。

    3. モデルバウンドビューファイルに、以下の内容を追加します:

      @model NavigationModel

    4. モデルバウンドビューファイルを保存してください。

    モデルバウンドビューを登録してください

    モデルバウンドビューをSitecoreレンダリングエンジン内のレイアウトサービスコンポーネント名(両方ともNavigation Renderingと呼ばれます)にマッピングする必要があります。

    モデルバウンドビューをStartupクラスに登録するには:

    1. Visual Studio、Solution ExplorerではStartup.csファイルをダブルクリックします。

    2. Startup.csファイルのservices.AddSitecoreRenderingEngine呼び出しで、モデルバウンドビューとモデルをレンダリングエンジンコンポーネントとしてAddModelBoundView()(https://doc.sitecore.com/resources/sitecore-asp-dot-net-rendering-sdk/api/Sitecore.AspNet.RenderingEngine.Extensions.RenderingEngineOptionsExtensions.html#Sitecore\_AspNet\_RenderingEngine\_Extensions\_RenderingEngineOptionsExtensions\_AddModelBoundView\_\_1\_Sitecore\_AspNet\_RenderingEngine\_Configuration\_RenderingEngineOptions\_System\_String\_)メソッドで登録します。

      services.AddSitecoreRenderingEngine(options => { //Register your components here options .AddModelBoundView("ContentBlock") .AddModelBoundView("Navigation Rendering") .AddDefaultPartialView("_ComponentNotFound"); }) // Includes forwarding of Scheme as X-Forwarded-Proto to the Layout Service so that // Sitecore Media and other links have the correct scheme. .ForwardHeaders() // Enable forwarding relevant headers and client IP for Sitecore Tracking and Personalization. .WithTracking() // Enable support for the Experience Editor. .WithExperienceEditor(options => { // Experience Editor integration needs to know the external URL of your rendering host, // if behind HTTPS termination or another proxy (like Traefik). if (Configuration.RenderingHostUri != null) { options.ApplicationUrl = Configuration.RenderingHostUri; } });

      !重要モデルバウンドビューファイルの名前がJSONレンダリングの名前と一致しない場合、Unknown Componentエラーが発生します。

    3. Startup.csファイルを保存してください。

    モデルバウンドビューの検証

    Getting Startedテンプレートのアイテムやプロジェクトの公開、実行、テスト方法をご覧ください。

    !ヒントプロジェクト内のREADMEファイルと解決策を確認し、追加情報を確認してください。

この記事を改善するための提案がある場合は、 お知らせください!