MVC レンダリングのコンテンツの依存関係を設定する

Current version: 10.1

データ ソース プロパティ (データ ソースを指定しない場合はページ アイテム) を使用してレンダリングをコンテンツに関連付けます。コントローラーのコンテンツにアクセスしたり、RenderingContext.Current.Rendering オブジェクトの Item プロパティまたは Items プロパティを使用してコードを表示したりすることができます。

ただし、レンダリング デザインで、1 つまたは複数のアイテムを超えた関連関係するアイテムのナビゲートが必要となるシナリオがあります。たとえば、データ ソースを実際のコンテンツのフォルダーまたはコンテナーとして使用できます。この場合、データ ソース プロパティをフォルダー アイテムに設定し、コントローラーのコンテンツにアクセスしたりコードを表示したりするために RenderingContext.Current.Rendering.Item.Children オブジェクトを使用する必要があります。

もう 1 つの例はパンくずレンダリングです。これを使用して現在のページ アイテムの祖先間を移動できます。一般に、レンダリングは 1 つまたは複数のデータ ソース アイテムをその依存関係の一部に拡張する場合があります。これらの依存関係は、系統または関連する依存関係として分類できます。

これらのコンテンツの依存関係を Sitecore のレンダリング アイテムに指定できます。これは、部分的な HTMLキャッシュのクリアやページ コンテンツ検索などの機能を使用する場合に重要です。

レンダリングのコンテンツの依存関係を設定するには:

  1. コンテンツ ツリーで、レンダリング定義アイテムに移動します。

  2. [コンテンツの依存関係] フィールドで 1 つまたは複数のオプションを選択します。

    [コンテンツの依存関係] フィールド

    オプションは次のとおりです。

    • 祖先

      レンダリングでは、1 つまたは複数のデータ ソース アイテムの祖先が使用されます。

    • レンダリングでは、1 つまたは複数のデータ ソース アイテムの親が使用されます。

    • 兄弟

      レンダリングでは、1 つまたは複数のデータ ソース アイテムの兄弟が使用されます。

    • 関連アイテム

      レンダリングでは、1 つまたは複数のデータ ソース アイテムの関連アイテムが使用されます。

    • 再帰関連アイテム

      このオプションを ([関連商品] 以外の) 他のオプションと一緒に使用する場合、そのオプションのアイテムの関連アイテムもレンダリングで使用されることを示します。たとえば、このオプションを [祖先] オプションと使用する場合、すべての祖先とその関連アイテムがレンダリングで使用されることを示します。このオプションは、他の系統オプションと連動するように特別に設計されています。単独で使用する場合は、[関連アイテム] と同様に機能します。そのような場合は、[関連アイテム] を使用してください。

    • レンダリングでは、1 つまたは複数のデータ ソース アイテムの直下の子が使用されます。

    • 子孫

      レンダリングでは、1 つまたは複数のデータ ソース アイテムの子孫が使用されます。

新しいコンテンツの依存関係オプションを作成する

デフォルトのコンテンツ依存関係オプションがニーズに合わない場合は、独自のオプションを作成できます。

オプションを作成するには:

  1. コンテンツ ツリーで、アイテム テンプレート (sitecore/templates/System/Item) に基づいて、以下の場所にオプション アイテムを作成します: /sitecore/system/Settings/Layouts/Renderings/Content Dependency Types

  2. オプションを検査して関連する依存関係をパイプラインの結果に追加するプロセッサーを追加することにより、getRenderingContentDependencies パイプラインを拡張します。一般的なプロセッサーの実装は次のようになります。

    RequestResponse
     public void Process(GetRenderingContentDependenciesArgs args)
    {   
        if (args.Datasource == null || args.Datasource.Count == 0)
        {
            return;
        }
    
        if (args.RenderingItem?.ContentDependencies.Contains("THE OPTIONS ITEM ID HERE"))
        {
            var result = new List<ContentDependencyEntry>();
    
            foreach(var datasource in args.Datasource)
            {
                // populate the result with the dependencies 
            }
            
            args.AddResolvedDependencies(result); // submit the result
        }
    }

Do you have some feedback for us?

If you have suggestions for improving this article,