在 Orchard 1.6 上,我定义了一个名为 Offer 的自定义内容类型,这个 Offer 有一个 pack 字段。在显示一个报价的页面上,我想显示具有相同包装的其他报价的简短列表。
为此,我尝试进行投影,但是如何在查询过滤器中指定 pack 字段必须等于当前显示的报价的 pack 字段?
谢谢你。
在 Orchard 1.6 上,我定义了一个名为 Offer 的自定义内容类型,这个 Offer 有一个 pack 字段。在显示一个报价的页面上,我想显示具有相同包装的其他报价的简短列表。
为此,我尝试进行投影,但是如何在查询过滤器中指定 pack 字段必须等于当前显示的报价的 pack 字段?
谢谢你。
您可以编写一个内容处理程序来存储当前显示的内容项,以供以后在请求中使用:
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。)
我不相信这是目前可能的。恐怕您必须编写自己的代码才能做到这一点。