在 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 作为如何编写投影过滤器的示例。)

关于filter - 基于另一个模块字段的 Orchard 过滤器投影查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14402243/

10-12 14:03