Orchard过滤投影查询基于另一个模块字段

时间:2013-01-18 15:34:55

标签: filter orchardcms projection

在Orchard 1.6上我定义了一个名为Offer的自定义内容类型,此商品有一个包字段。在显示一个报价的页面上,我想显示具有相同包装的其他报价的简短列表。

为此,我尝试进行投影但是如何在查询过滤器中指定pack字段必须等于当前显示的商品的包字段?

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以编写内容处理程序来存储当前显示的内容项,以便以后在请求中使用:

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。)

答案 1 :(得分:0)

我不相信这是目前可行的。你恐怕要编写自己的代码才能做到这一点。