如何在Orchard中为Container Widgets添加基于区域的替代方案?

时间:2012-03-05 14:41:00

标签: orchardcms

我希望能够自定义ContainerWidget的列表呈现方式。形状跟踪只给出了以下选项:

  1. Parts.ContainerWidget.cshtml
  2. Parts.ContainerWidget-URL-homepage.cshtml
  3. 我希望能够为特定区域提供备用。我认为 IShapeTableProvider是要走的路,但我不确定。我还想过使用Widget alternate(Widget-MyZone.cshtml),但我无法理解如何获取基础列表项以自己呈现它们。此外,重写Widget似乎有点矫枉过正。理想情况下,我希望能够添加像Parts.ContainerWidget-MyZone.cshtml这样的备用备用。

    网上似乎有不少帖子讨论这个问题,但我找不到的任何内容确实指出了一个具体的工作示例。

    这是正确的做法吗?还有什么我应该试试的?有什么例子吗?

2 个答案:

答案 0 :(得分:1)

事实证明,Orchard 1.4内置了对基于区域的容器小部件替代方案的支持。因此,推荐的解决方案是升级到1.4。

答案 1 :(得分: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");
                }

            });



    }