2012-03-05 51 views
1

我希望能夠自定義列表由ContainerWidget s呈現的方式。形狀跟蹤只給我下面的選項:如何在Orchard中爲ContainerWidgets添加基於區域的替代項?

  1. Parts.ContainerWidget.cshtml
  2. Parts.ContainerWidget-URL-homepage.cshtml

我希望能夠提供一個備用的一個特定的區域。我認爲IShapeTableProvider是要走的路,但我只是不確定。我也想過使用Widget替代品(Widget-MyZone.cshtml),但我無法理解如何到底層列表項目自己渲染它們。此外,重寫Widget看起來像是過度殺傷。理想情況下,我希望能夠添加零件替代品,如Parts.ContainerWidget-MyZone.cshtml

圍繞網絡討論這個問題似乎有不少文章,但我找不到真正指向具體工作的例子。

這是正確的做法嗎?還有別的我應該嘗試?任何例子?

回答

1

事實證明,Orchard 1.4已經內置支持基於區域的容器小部件替代方案。因此,推薦的解決方案是升級到1.4。

0

IShapeTable提供者應該工作。當你嘗試時會發生什麼?下面是一個粗略的例子(未經測試):

public class Shapes : IShapeTableProvider { 
    public void Discover(ShapeTableBuilder builder) { 
     builder.Describe("Content").OnDisplaying(displaying => { 

       if (displaying.ShapeMetadata.DisplayType == "Detail" 
        && (displaying.Shape.ContentItem as ContentItem).ContentType.Equals("MyWidgetType", System.StringComparison.OrdinalIgnoreCase)) { 

        var metadata = displaying.ShapeMetadata; 
        ContentItem contentItem = displaying.Shape.ContentItem; 
        metadata.Alternates.Add("MyWidgetType_MyCUstomAlternate"); 
       } 

      }); 



    } 
+0

我創建了一個簡單的形狀表提供程序(http://pastebin.com/NwiYqh6a),並將其放在我的主題中的「代碼」文件夾中,但它似乎沒有做任何事情。 Shape Tracing不會爲Parts_ContainerWidget顯示任何其他替代項。 – Ragesh 2012-03-05 15:44:06

+0

在相關說明中,是否有形狀表提供者的任何文檔(如何使用它們,他們可以做什麼等)? – Ragesh 2012-03-05 16:13:46

+0

嘗試啓用「WidgetAlternates」和「UrlAlternates」模塊(如果尚未啓用)。 – 2012-03-05 16:16:30

相關問題