データソースアイテムのURLを返すカスタムレンダリングコンテンツリゾルバー

samatsu 12/9/2021 450 N/A Sitecore JSS

Sitecore JSS でコンポーネントにデータソースアイテムを関連付けた場合、デフォルトのレンダリングリゾルバーである、Datasource ResolverによってJSONデータにシリアル化されたデータソースアイテムがコンポーネントの引数に渡されます。デフォルトのDatasource ResolverはデータソースアイテムのフィールドをJSONデータにシリアル化してくれるのですが、その中に、そのアイテムのリンクを提供するためのURLは含まれていません。

そのため、今回は、データソースアイテムのリンクも含めたJSONデータを生成するカスタムレンダリングコンテンツリゾルバーを作成しました。ソースコードは次の通りです。

    public class DatasourceItemAndLinkResolver : RenderingContentsResolver
    {
        public override object ResolveContents(Rendering rendering, IRenderingConfiguration renderingConfig)
        {
            Assert.ArgumentNotNull(rendering, nameof(rendering));
            Assert.ArgumentNotNull(renderingConfig, nameof(renderingConfig));

            Item contextItem = this.GetContextItem(rendering, renderingConfig);
            if(contextItem == null)
            {
                return null;
            }
            JObject jobject1 = this.ProcessItem(contextItem, rendering, renderingConfig);
            jobject1["url"] = LinkManager.GetItemUrl(contextItem);
            jobject1["name"] = contextItem.Name;
            jobject1["displayName"] = contextItem.DisplayName;
            return jobject1;
        }
    }

実装は、既存のRenderingContentsResolverクラスを再利用しつついくつかのプロパティを追加しているだけという簡単なコードです。urlプロパティにアクセスすることで、データソースアイテムのURLの文字列にアクセスできるようになります。

あとは、カスタムリゾルバーをコンポーネントで利用するだけです。その方法に関しては、ドキュメントのサイトがありますのでそちらをご参照ください。

Choosing or configuring a built-in Rendering Contents Resolver