Orchardcms 我如何为Orchard中的ContainerWidget添加基于区域的备选方案?

Orchardcms 我如何为Orchard中的ContainerWidget添加基于区域的备选方案?,orchardcms,Orchardcms,我希望能够定制ContainerWidgets呈现列表的方式。形状跟踪仅提供以下选项: Parts.ContainerWidget.cshtml Parts.ContainerWidget-url-homepage.cshtml 我希望能够为特定区域提供一个替代方案。我认为,IShapeTableProvider是一条路,但我只是不确定。我还考虑过使用小部件替换(Widget MyZone.cshtml),但我不知道如何获得底层列表项来自己呈现它们。此外,覆盖小部件似乎有点过头了。理想情况下,我

我希望能够定制
ContainerWidget
s呈现列表的方式。形状跟踪仅提供以下选项:

  • Parts.ContainerWidget.cshtml
  • Parts.ContainerWidget-url-homepage.cshtml
  • 我希望能够为特定区域提供一个替代方案。我认为,
    IShapeTableProvider
    是一条路,但我只是不确定。我还考虑过使用小部件替换(
    Widget MyZone.cshtml
    ),但我不知道如何获得底层列表项来自己呈现它们。此外,覆盖小部件似乎有点过头了。理想情况下,我希望能够添加一个类似于
    Parts.ContainerWidget MyZone.cshtml
    的备用部件

    网络上似乎有很多帖子讨论这个问题,但我找不到任何具体的工作实例


    这是正确的方法吗?还有什么我应该试试的吗?有关IShapeTable提供程序的任何示例都可以使用。当你尝试时会发生什么?下面是一个粗略的示例(未经测试):


    IShapeTable提供程序应该可以工作。当你尝试时会发生什么?下面是一个粗略的示例(未经测试):


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

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

    我创建了一个简单的形状表提供程序(),并将其放在主题中的“代码”文件夹中,但它似乎没有任何作用。形状跟踪没有为Parts_ContainerWidget显示任何其他替代项。在相关说明中,是否有形状表提供程序的文档(如何使用,它们可以做什么等)?如果尚未启用“WidgetAlternates”和“UrlAlternates”模块,请尝试启用。是的,这里有一些:。也很有用:,我刚刚安装了Orchard 1.4,它似乎有基于区域的备用容器小部件,可以开箱即用。我现在只打算使用1.4,而不是我之前使用的1.3。我创建了一个简单的形状表提供程序(),并将其放在主题中的“代码”文件夹中,但它似乎没有任何作用。形状跟踪没有为Parts_ContainerWidget显示任何其他替代项。在相关说明中,是否有形状表提供程序的文档(如何使用,它们可以做什么等)?如果尚未启用“WidgetAlternates”和“UrlAlternates”模块,请尝试启用。是的,这里有一些:。也很有用:,我刚刚安装了Orchard 1.4,它似乎有基于区域的备用容器小部件,可以开箱即用。我现在只打算使用1.4,而不是我之前使用的1.3。
    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");
                    }
    
                });
    
    
    
        }