1740158633
2025-02-03 14:30:00
このブログ投稿では、Episerver Find(現在は検索とナビゲーションとして知られている)でインデックスされたアイテムの並べ替え順序を維持しようとするときに発生する一般的な問題に対処します。
シナリオ:
コンテンツ領域のあるページがあると想像してください。特定のビジネス要件により、このコンテンツ領域のFindインデックスからアイテムを取得する必要があります。ただし、これらのアイテムがEpiserver Findでインデックス化されると、結果で元のソート順序が失われます。課題は、コンテンツ領域に表示されるこれらのアイテムの元の並べ替え順序を保持することです。
コードからスニップ –
var parentPage = contentLoader.Get(new ContentReference(10), new CultureInfo("en"));
var result = IContentResult resultsFromFind;
var reportBlocksByReference = result.Items.ToDictionary(x => x.ContentLink);
var orderedBlocks = new List();
foreach (var contentRef in parentPage.ReportsArea.FilteredItems)
{
if (reportBlocksByReference.TryGetValue(contentRef.ContentLink, out var blockInParentPage))
{
orderedBlocks.Add(blockInParentPage);
}
}
return orderedBlocks
-
親ページを取得します:コードは、コンテンツローダーを使用して特定のタイプの親ページを取得することから始まります(
ParentPageType)コンテンツリファレンスIDの使用(10)および指定された文化(en)。 -
検索結果を取得します:次に、エピソーバーの検索から検索結果を取得します。
BlockInParentPage。これらの結果は、名前の変数に保存されますresultsFromFind。 -
辞書を作成します:辞書は検索結果から作成され、各ブロックのコンテンツリンクをブロック自体にマッピングします。これにより、コンテンツリンクによってブロックをすばやく検索できます。
-
順序付けされたリストを初期化します:名前の空のリスト
orderedBlocksコンテンツ領域に表示されるブロックを元の順序で保存するために初期化されます。 -
フィルタリングされたアイテムを繰り返します:コードは繰り返します
FilteredItemsのコレクションReportsArea親ページ。このコレクションは、順序を保存する必要があるコンテンツエリアのアイテムを表しています。 -
一致を確認してください:の各コンテンツリファレンスについて
FilteredItems、コードは、以前に作成された辞書にコンテンツリンクが存在するかどうかを確認します。これにより、検索結果にブロックが存在するかどうかが決まります。 -
注文リストに追加します:一致が見つかった場合、対応するブロックがに追加されます
orderedBlocksリスト。これにより、ブロックがコンテンツ領域に表示されるのと同じ順序で追加されることが保証されます。 -
注文されたリストを返したり、使用したりします:最後に、
orderedBlocksリストは、目的の順序でブロックを含むようになりましたが、必要に応じて元のソート順序を維持するために返品または使用できます。
結論として、このアプローチにより、エピソーバーFindインデックスから取得されたアイテムがコンテンツ領域に配置されているのと同じ順序で返されることを効果的に保証し、元のソートオーダーを維持するというビジネス要件を満たします。
#Episerverの索引項目の並べ替え順序を保持する方法Find