2013-01-18 56 views
3

在Orchard 1.6上我定義了一個名爲Offer的自定義內容類型,此優惠有一個包裝字段。在顯示一個優惠的頁面上,我想用同一個包顯示其他優惠的簡短列表。基於另一個模塊字段的果園篩選投影查詢

爲此,我嘗試進行投影,但是如何在查詢過濾器中指定pack字段必須等於當前顯示的offer的pack字段?

謝謝。

回答

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作爲如何編寫投影過濾器的示例。)

+0

+1幫助我找到類似問題的解決方案 –

+0

此解決方案僅在內容實際顯示後才起作用* (顯示形狀被創建)。您將無法以較早的方式獲得當前項目。 –

+0

您可以在如下視圖中使用它:var item = WorkContext.GetState (「CurrentContentItem」); – Hazza

0

我不相信這是目前可能的。你恐怕不得不編寫自己的代碼來做這件事。

相關問題