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

Filter 基于另一个模块字段的Orchard过滤器投影查询,filter,orchardcms,projection,Filter,Orchardcms,Projection,在Orchard 1.6上,我定义了一个名为Offer的自定义内容类型,该Offer有一个pack字段。在显示一个报价的页面上,我想显示具有相同包装的其他报价的简短列表 为此,我已尝试进行投影,但如何在查询筛选器中指定pack字段必须等于当前显示的报价的pack字段 谢谢。我认为目前不可能做到这一点。恐怕您必须编写自己的代码才能做到这一点 您可以编写内容处理程序来存储当前显示的内容项,以便以后在请求中使用: public class MyContentHandler : ContentHandl

在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);
        }
    }
}
公共类MyContentHandler:ContentHandler
{
只读IOrchardServices果园服务;
公共内容员(
IOrchardServices果园服务)
{
this.orchardServices=果园服务;
}
受保护的覆盖无效BuildDisplayShape(BuildDisplayContext上下文)
{
if(context.DisplayType==“Detail”&((IShape)context.Shape).Metadata.Type==“Content”&&
orchardServices.WorkContext.GetState(“currentContentItem”)==null)
{
orchardServices.WorkContext.SetState(“currentContentItem”,context.ContentItem);
}
}
}

然后,可以使用存储在状态中的内容项引用编写投影过滤器。(有关如何编写投影过滤器的示例,请参见Orchard.Tags.Projections.TagsFilter。)

此解决方案仅在实际显示内容(创建显示形状)后才起作用。您将无法以这种方式更早地获取当前项。您可以在以下视图中使用此选项。。。var item=WorkContext.GetState(“CurrentContentItem”);