Orchard 1.6 で、Offer という名前のカスタム コンテンツ タイプを定義しました。この Offer には pack フィールドがあります。1 つのオファーを表示するページで、同じパックの他のオファーの短いリストを表示したいと考えています。
これを行うためにプロジェクションを作成しようとしましたが、現在表示されているオファーのパック フィールドとパック フィールドが等しくなければならないことをクエリ フィルターで指定するにはどうすればよいですか?
ありがとうございました。
Orchard 1.6 で、Offer という名前のカスタム コンテンツ タイプを定義しました。この Offer には pack フィールドがあります。1 つのオファーを表示するページで、同じパックの他のオファーの短いリストを表示したいと考えています。
これを行うためにプロジェクションを作成しようとしましたが、現在表示されているオファーのパック フィールドとパック フィールドが等しくなければならないことをクエリ フィルターで指定するにはどうすればよいですか?
ありがとうございました。
リクエストで後で使用するために、現在表示されているコンテンツ アイテムを格納するコンテンツ ハンドラを作成できます。
public class MyContentHandler : ContentHandler
{
readonly IOrchardServices orchardServices;
public MyContentHandler (
IOrchardServices orchardServices)
{
this.orchardServices = orchardServices;
}
protected override void BuildDisplayShape(BuildDisplayContext context)
{
if (context.DisplayType == "Detail" && ((IShape)context.Shape).Metadata.Type == "Content" &&
orchardServices.WorkContext.GetState<ContentItem>("currentContentItem") == null)
{
orchardServices.WorkContext.SetState("currentContentItem", context.ContentItem);
}
}
}
次に、状態に格納されたコンテンツ アイテム参照を使用して射影フィルターを作成できます。(プロジェクション フィルターの作成方法の例として、Orchard.Tags.Projections.TagsFilter を参照してください。)
これが現在可能であるとは思いません。これを行うには、独自のコードを作成する必要があります。