在Orchard 1.6上我定義了一個名爲Offer的自定義內容類型,此優惠有一個包裝字段。在顯示一個優惠的頁面上,我想用同一個包顯示其他優惠的簡短列表。基於另一個模塊字段的果園篩選投影查詢
爲此,我嘗試進行投影,但是如何在查詢過濾器中指定pack字段必須等於當前顯示的offer的pack字段?
謝謝。
在Orchard 1.6上我定義了一個名爲Offer的自定義內容類型,此優惠有一個包裝字段。在顯示一個優惠的頁面上,我想用同一個包顯示其他優惠的簡短列表。基於另一個模塊字段的果園篩選投影查詢
爲此,我嘗試進行投影,但是如何在查詢過濾器中指定pack字段必須等於當前顯示的offer的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作爲如何編寫投影過濾器的示例。)
我不相信這是目前可能的。你恐怕不得不編寫自己的代碼來做這件事。
+1幫助我找到類似問題的解決方案 –
此解決方案僅在內容實際顯示後才起作用* (顯示形狀被創建)。您將無法以較早的方式獲得當前項目。 –
您可以在如下視圖中使用它:var item = WorkContext.GetState(「CurrentContentItem」); –
Hazza