Sitecore レンダリング エンジン
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
Sitecore レンダリング エンジンは、Sitecore レイアウトサービスを使用して、Sitecore インスタンスから取得したコンテンツをレンダリングします。アプリケーションでレンダリング エンジンを使用するにはいくつかの設定が必要です。この設定のほとんどは、Startup
クラスで実行されます。Microsoft の ASP.NET Core でのアプリケーションのスタートアップを参照してください。
レンダリング エンジン ライブラリは NuGet パッケージとして利用でき、Sitecore.AspNet.RenderingEngine
の接頭辞を持ちます。
レンダリング エンジン サービスの登録
必要な Sitecore レンダリング エンジン サービスを依存関係挿入コンテナーに追加するには、ASP.NET Startup
クラスの ConfigureServices()
メソッド内にある Sitecore.AspNet.RenderingEngine.Extensions
名前空間の AddSitecoreRenderingEngine()
拡張メソッドを使用します。
メソッドは、ISitecoreRenderingEngineBuilder
インスタンスを返し、次のような他の拡張メソッドを使用してレンダリング エンジンをさらに設定できるようにします。
public void ConfigureServices(IServiceCollection services)
{
var renderingEngineBuilder = services.AddSitecoreRenderingEngine();
}
AddSitecoreRenderingEngine()
メソッドは、レンダリング エンジンのオプション設定を可能にする Action<RenderingEngineOptions>
パラメーターを受け入れます。
RenderingEngineOptions
パラメーターを使用すると、次の設定をクラス プロパティとしてエクスポーズできます。
-
ICollection<Action<HttpRequest, SitecoreLayoutRequest>> RequestMappings
- 現在のHttpRequest
とSitecoreLayoutRequest
の間のマッピング リストを指定できます。デフォルトのマッピング セットは、次のとおりです。
-
存在する場合、
IRequestCultureFeature
内のRequestCulture.Culture.Name
からのSitecoreLayoutRequest
上のLanguage
。 -
存在する場合、
sitecoreRoute
ルート値からのSitecoreLayoutRequest
上のPath
。 -
sitecoreRoute
ルート値が存在しない場合、HttpRequest.Path
値からのPath
。
注記デフォルトのマッピングは、
MapSitecoreLocalizedRoute
拡張でサポートされ、MVC エンドポイント (app.UseEndpoints
) を設定する際に使用できます。リストにさらにマッピングを追加するには、
Sitecore.AspNet.RenderingEngine.Extensions
名前空間で利用できるMapToRequest()
拡張メソッドを使用します。以下は、現在のHttpRequest
からのlang
クエリ文字列値を、レイアウト サービスに送信するSitecoreLayoutRequest
の言語値にマッピングするこのメソッドの使用例です。RequestResponsepublic void ConfigureServices(IServiceCollection services) { var renderingEngineBuilder = services.AddSitecoreRenderingEngine( options => options.MapToRequest( (httpRequest, sitecoreLayoutRequest) => sitecoreLayoutRequest.Language(httpRequest.Query["lang"])) ); }
-
-
SortedList<int, ComponentRendererDescriptor> RendererRegistry
- コンポーネント レンダラーのソート済みリスト。デフォルトでは、このリストは空です。レンダリング エンジンは、デフォルトでいくつかのコンポーネント レンダラーを提供します。たとえば、ビュー コンポーネントと部分ビュー レンダラーがあります。
レンダリング エンジンでは、コンポーネント レンダラーの設定に役立つ次の拡張メソッドを使用できます。
-
AddViewComponent()
- Sitecore レイアウト コンポーネント名をビュー コンポーネント レンダリングにマッピングします。マッピング プロセスでは大文字と小文字が区別されません。 -
AddModelBoundView<TModel>()
- デフォルトの Sitecore ビュー コンポーネントを使用して、Sitecore レイアウト コンポーネント名をデフォルト ビュー コンポーネント レンダリングにマッピングし、モデル バインドします。マッピング プロセスでは大文字と小文字が区別されません。 -
AddPartialView()
- Sitecore レイアウト コンポーネント名を部分ビュー レンダリングにマッピングします。 -
AddDefaultPartialView()
- 一致しない Sitecore レイアウト コンポーネントをデフォルトの部分ビューにマッピングします。
ビュー コンポーネント、モデル バインド ビュー、および部分ビューの使用の詳細については、ビューの種類を参照してください。
-
-
ComponentRendererDescriptor? DefaultRenderer
- これは、Sitecore コンポーネントのレンダリングを処理するためのデフォルトのコンポーネント レンダラー記述子オブジェクトです。デフォルトは、null
です。AddDefaultComponentRenderer()
拡張メソッドを使用して、RenderingEngineOptions
にDefaultRenderer
を設定します。デフォルト レンダラーは、LoggingComponentRenderer
で、HTML 出力を生成する代わりに、Sitecore コンポーネント コンテンツを指定されたログに書き込みます。これは、アプリケーションのテストで役に立ちます。次に例を示します。RequestResponsepublic void ConfigureServices(IServiceCollection services) { var renderingEngineBuilder = services.AddSitecoreRenderingEngine(options => options // Map Partials .AddPartialView("HeaderBlock", "_HeaderBlock") .AddPartialView(name => name.StartsWith("sc"), "_OtherBlock") // Map View Components .AddModelBoundView<BoundContentBlock>("ContentBlock") .AddViewComponent("Styleguide-Layout", "StyleguideLayout") .AddViewComponent(name => name.StartsWith("sc"), "Other") // Add fallback for any other component .AddDefaultPartialView("_ComponentNotFound"); ); }
レンダリング エンジンでのエンドポイントとコントローラーの使用
コンテンツ駆動型の Sitecore サイトを作成する場合、通常 Sitecore コンテンツ ツリーは、ルーティングを所有しています。つまり、Sitecore URL はそのコンテンツ ツリーの構造によって決定されます。Sitecore URL は、すぐに使用できる次の形式のいずれかになります。
-
Language
を含む場合 -/[language ISO]/path/to/the/page
-
Language
を含まない場合 -/path/to/the/page
サイトが多言語である場合は、要求のローカリゼーションも設定する必要があります。MapSitecoreLocalizedRoute
拡張を使用して、Sitecore スタイルの言語埋め込みとコンテンツ パスをサポートするルーティングを設定できます。言語を含まないパスをサポートするには、組み込みの ASP.NET MapFallbackToController
を キャッチオール として使用し、Sitecore コンテンツ パスを処理できます。
Sitecore リンク プロバイダーが常に言語を埋め込むように明示的に設定されていない限り、多言語サイトは通常、言語の埋め込みとコンテンツ パスの両方を処理します。
以下に、Default
コントローラーの Index
アクションにマッピングされた Sitecore ルーティングの例を示します。
app.UseEndpoints(endpoints =>
{
endpoints.MapSitecoreLocalizedRoute("Localized", "Index", "Default");
endpoints.MapFallbackToController("Index", "Default");
});
Sitecore エンドポイントの前に、Sitecore 以外のルーティングのエンドポイントを追加できます。
[UseSitecoreRendering]
属性 (Sitecore.AspNet.RenderingEngine.Filters
名前空間で利用可能) で Index
アクションにタグ付けして、Sitecore レンダリング ミドルウェアとレイアウト サービスに対応する要求を有効にしてください。
public class DefaultController : Controller
{
[UseSitecoreRendering]
public IActionResult Index(Route route)
{
return View(route);
}
}
この属性は、コントローラー自体にも適用できます。