ウォークスルー、内容リゾルバをレンダリングする方法
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
!重要以前にアプリを統合していた場合、それは旧版のASP.NETコアレンダリングSDK(バージョン22以前)を使用しています。このSDKは更新を受け取っていないため、最新のバージョンへのアップグレード をお勧めします。
Sitecore Layout Serviceと共にコンテンツリゾルバーを使って、コンポーネントデータソースのシリアライズを超えたより複雑なデータを提供します。一般的なユースケースには、サイトナビゲーション、検索結果、カスタムビジネスロジックの出力や状態の返還などがあります。このウォークスルーでは、モデルバウンドビューでレンダリングするためのコンテンツツリーのモデルを返す内容リボルバの作成方法を学びます。
ウォークスルーを終えたら、ビジネスドメインごとにソリューションを整理し、複数のサービスからの関連コードの共通クロージャーを作成するSitecore Helixプラクティスに慣れておくことをお勧めします。これにより、関連するコンテンツリゾルバやレンダリングコードをソリューション内に共存できます。インスピレーションはSitecore Helix例リポジトリをご覧ください。
!注このドキュメントは 、Getting Startedテンプレートを使用している か、Content ManagementとContent DeliveryインスタンスのPlatformプロジェクト、RenderingHostプロジェクトを含む動作するSitecoreソリューションを持っていることを前提としています。
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プロジェクトに追加するには:
- Visual Studio、Solution Explorerで右クリック Platform/References から 「パッケージ管理」NuGetクリックしてください。
- ウィンドウ右上隅の 「パッケージソース 」メニューで、 https://nuget.sitecore.com/resources/v3/index.jsonを指すパッケージソースを選択します。
- ウィンドウの左上に「 ブラウズ 」をクリックして、Sitecore.LayoutService NuGetパッケージを検索してください。
- 検索結果一覧でSitecore.LayoutServiceをクリックしてください。
- ウィンドウの右側で 「インストール 」をクリックしてSitecore.LayoutService NuGetパッケージをダウンロードしてインストールします。
- 必要に応じてNugetパッケージマネージャーがソリューションを修正できるようにします。
テンプレートクラスを追加
Templatesクラスはcontentsリsolverクラスの依存関係です。
TemplatesクラスをPlatformプロジェクトに追加するには:
-
Visual Studio、Solution Explorerでは右クリックでPlatformを右クリックし、「 追加、新しいアイテム」をクリックします。
-
「 新しいアイテムを追加」 ダイアログで:
- 左側のペインで Installed/Visual C#/ASP.NET Core/Codeをクリックします。
- 中央のパネルで「 クラス」をクリックします。
- 下部の 「Name 」欄で「 Templates.cs 」を入力し、「 追加」をクリックします。
-
クラスファイルに以下の内容を追加します:
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}"); } } } }
-
クラスファイルを保存してください。
contentsリゾルバクラスを作成します
contentsリゾルバクラスはSitecore.LayoutService.ItemRendering.ContentsResolvers.RenderingContentsResolverクラスのResolveContentsメソッドを上書きし、コンテンツツリーオブジェクトを返します。
!重要ResolveContentsメソッドは、レンダリングホストにJSONレンダリングとして返せるオブジェクトを返さ なければなりません 。
Platformプロジェクトで内容リゾルバクラスを作成するには:
-
Visual Studio、Solution Explorerでは右クリックでPlatformを右クリックし、「 追加、新しいアイテム」をクリックします。
-
「新しいアイテムを追加」ウィンドウで:
- 左側のペインで Installed/Visual C#/ASP.NET Core/Codeをクリックします。
- 中央のパネルで「 クラス」をクリックします。
- 下部の 「Name 」欄で「 NavigationContentsResolver.cs 」を入力し、「 追加」をクリックします。
-
クラスファイルに以下の内容を入力してください:
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