Sitecore レンダリング エンジン

Current version: 10.1

Sitecore レンダリング エンジンは、Sitecore レイアウトサービスを使用して、Sitecore インスタンスから取得したコンテンツをレンダリングします。アプリケーションでレンダリング エンジンを使用するにはいくつかの設定が必要です。この設定のほとんどは、Startup クラスで実行されます。Microsoft の ASP.NET Core でのアプリケーションのスタートアップを参照してください。

レンダリング エンジン ライブラリは NuGet パッケージとして利用でき、Sitecore.AspNet.RenderingEngine の接頭辞を持ちます。

レンダリング エンジン サービスの登録

必要な Sitecore レンダリング エンジン サービスを依存関係挿入コンテナーに追加するには、ASP.NET Startup クラスの ConfigureServices() メソッド内にある Sitecore.AspNet.RenderingEngine.Extensions 名前空間の AddSitecoreRenderingEngine() 拡張メソッドを使用します。

メソッドは、ISitecoreRenderingEngineBuilder インスタンスを返し、次のような他の拡張メソッドを使用してレンダリング エンジンをさらに設定できるようにします。

RequestResponse
public void ConfigureServices(IServiceCollection services)
{
    var renderingEngineBuilder = services.AddSitecoreRenderingEngine();
}

AddSitecoreRenderingEngine() メソッドは、レンダリング エンジンのオプション設定を可能にする Action<RenderingEngineOptions> パラメーターを受け入れます。

RenderingEngineOptions パラメーターを使用すると、次の設定をクラス プロパティとしてエクスポーズできます。

  • ICollection<Action<HttpRequest, SitecoreLayoutRequest>> RequestMappings - 現在の HttpRequestSitecoreLayoutRequest の間のマッピング リストを指定できます。

    デフォルトのマッピング セットは、次のとおりです。

    • 存在する場合、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 の言語値にマッピングするこのメソッドの使用例です。

    RequestResponse
    public 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() 拡張メソッドを使用して、RenderingEngineOptionsDefaultRenderer を設定します。デフォルト レンダラーは、LoggingComponentRenderer で、HTML 出力を生成する代わりに、Sitecore コンポーネント コンテンツを指定されたログに書き込みます。これは、アプリケーションのテストで役に立ちます。次に例を示します。

    RequestResponse
    public 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 ルーティングの例を示します。

RequestResponse
app.UseEndpoints(endpoints => 
{ 
  endpoints.MapSitecoreLocalizedRoute("Localized", "Index", "Default"); 
  endpoints.MapFallbackToController("Index", "Default"); 
}); 
注記

Sitecore エンドポイントの前に、Sitecore 以外のルーティングのエンドポイントを追加できます。

[UseSitecoreRendering] 属性 (Sitecore.AspNet.RenderingEngine.Filters 名前空間で利用可能) で Index アクションにタグ付けして、Sitecore レンダリング ミドルウェアとレイアウト サービスに対応する要求を有効にしてください。

RequestResponse
public class DefaultController : Controller 
{ 
  [UseSitecoreRendering] 
  public IActionResult Index(Route route) 
  { 
    return View(route); 
  } 
} 
注記

この属性は、コントローラー自体にも適用できます。

Do you have some feedback for us?

If you have suggestions for improving this article,