日本語版
最新ニュース
企業

Optimizely Graph – Geta カテゴリによるファセット

概要 Optimizely Graph (および Content Cloud SaaS) が世界的にデビューするにつれ、いくつかのバグや不具合が発生することが分かっています。 システムの現在の不具合の 1 つは、Geta カテゴリ アドオンの使用、特にファセットの使用に関連しています。幸いなことに、この問題を回避する方法を見つけ出し、一時的な解決策を思いついた人が数人います。 それで……何をする必要があるのでしょうか? クイックアップデート 皆さん、こんにちは。本題に入る前に、私が Optimizely のエキスパート サービス チームに直接勤務することになったことをお知らせします。サポートが必要な場合は、お気軽にご連絡ください。 さらに、このブログ投稿は、Netcel の Minesh Shah 氏と Muhammad Kashif 氏の協力があってこそ実現しました。お二人のご尽力に感謝いたします。 コンバータ まず、コンバーターで Geta Category プロパティを取得し、それを Opti Graph でインデックス付けできるプロパティに変換する必要があります。 これを行う最良の方法は、共通プロパティを参照するインターフェイスを作成することです。これにより、そのインターフェイス プロパティをターゲットとするコンバーターを実装できるため、理想的です。…

Optimizely Graph – Geta カテゴリによるファセット

1721703131
2024-07-22 19:08:54

概要

Optimizely Graph (および Content Cloud SaaS) が世界的にデビューするにつれ、いくつかのバグや不具合が発生することが分かっています。

システムの現在の不具合の 1 つは、Geta カテゴリ アドオンの使用、特にファセットの使用に関連しています。幸いなことに、この問題を回避する方法を見つけ出し、一時的な解決策を思いついた人が数人います。

それで……何をする必要があるのでしょうか?

クイックアップデート

皆さん、こんにちは。本題に入る前に、私が Optimizely のエキスパート サービス チームに直接勤務することになったことをお知らせします。サポートが必要な場合は、お気軽にご連絡ください。

さらに、このブログ投稿は、Netcel の Minesh Shah 氏と Muhammad Kashif 氏の協力があってこそ実現しました。お二人のご尽力に感謝いたします。

コンバータ

まず、コンバーターで Geta Category プロパティを取得し、それを Opti Graph でインデックス付けできるプロパティに変換する必要があります。

これを行う最良の方法は、共通プロパティを参照するインターフェイスを作成することです。これにより、そのインターフェイス プロパティをターゲットとするコンバーターを実装できるため、理想的です。

PROTIP: このコンバーターは、インターフェース内の後続の各プロパティに対して作成する必要があります。たとえば、「Categories」という名前のプロパティは、別のコンバーターなしで何度でも使用できますが、「Categories2」を追加する場合は、その特定のプロパティを対象とする別のコンバーターを作成する必要があります。

カテゴリ名ApiModelProperty.cs

[ServiceConfiguration(typeof(IContentApiModelProperty), Lifecycle = ServiceInstanceScope.Singleton)]
public sealed class CategoriesNamesApiModelProperty : IContentApiModelProperty
{
    private readonly ICategoryContentLoader _categoryContentLoader;
    public CategoriesNamesApiModelProperty(ICategoryContentLoader categoryContentLoader)
    {
        _categoryContentLoader = categoryContentLoader;
    }
    public object GetValue(ContentApiModel contentApiModel)
    {
        if (contentApiModel.Properties.TryGetValue(nameof(IFilterCategoriesContent.Categories), out var propertyModel))
        {
            if (propertyModel is List contentModelReferences && contentModelReferences.Any())
            {
                var names = new List();
                foreach (var category in contentModelReferences.Where(x => x.Id != null))
                {
                    if (_categoryContentLoader.TryGet(new ContentReference(category.Id!.Value),
                            out CategoryData categoryData))
                    {
                        names.Add(categoryData.Name);
                    }
                }
                return names;
            }
        }
        return Enumerable.Empty();
    }
    public string Name => "CategoryNames";
}

IFilterCategoriesコンテンツ.cs

public interface IFilterCategoriesContent
    {
        IList? Categories { get; set; }
    }

グラフ

上記のファイルが配置されると、インターフェースから継承するすべてのクラスに、Graph にインデックス付けされた新しいプロパティ「CategoryNames」が作成されます。このプロパティを使用して、モデル自体の Geta カテゴリと対話したり、それらをファセットとして使用したりできるようになります。

たとえば、Opti Graph 内で CategoryNames プロパティを利用するサンプル クエリを次に示します。

query getBlogItemListing(
  $start: Int = 0, 
  $pageSize: Int = 24, 
  $locale: [Locales!] = [en], 
  $facetsFilter: [String!]) 
  {
  getBlogItems: BlogItemPage(
    locale: $locale
    skip: $start
    limit: $pageSize
    orderBy: { StartPublish: DESC }
  ) {
    items {
      CategoryNames
      Url
      StartPublish,
      Name
    }
    total
    facets {
      category: CategoryNames(
        orderBy: DESC, 
        orderType: COUNT, 
        filters: $facetsFilter, 
        limit: 99) {
        count
        name
      }
    }
  }
}

このコードスニピットは、次のようなものを出力します(内容によって異なります)

まとめ

Geta カテゴリを Optimizely Graph 内のファセットとして利用するには、少量のカスタム開発を行う必要があります。これらの手順は、Graph がカテゴリ名を適切にインデックスできるようにするための回避策または応急処置を提供します。

とはいえ、アドオン開発者と協力して、Optimizely 製品を継続的に改善するための作業がバックグラウンドで行われています。いつかこの問題に対するすぐに使える解決策が出てくると期待しています。

#Optimizely #Graph #Geta #カテゴリによるファセット

執筆者について: nipponese

Nipponese News編集部は、国内外のニュースを日本語で分かりやすくお届けします。