我希望能够自定义ContainerWidget
的列表呈现方式。形状跟踪只给出了以下选项:
我希望能够为特定区域提供备用。我认为 IShapeTableProvider
是要走的路,但我不确定。我还想过使用Widget alternate(Widget-MyZone.cshtml
),但我无法理解如何获取基础列表项以自己呈现它们。此外,重写Widget似乎有点矫枉过正。理想情况下,我希望能够添加像Parts.ContainerWidget-MyZone.cshtml
这样的备用备用。
网上似乎有不少帖子讨论这个问题,但我找不到的任何内容确实指出了一个具体的工作示例。
这是正确的做法吗?还有什么我应该试试的?有什么例子吗?
答案 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");
}
});
}