2

我正在使用 Orchard CMS 构建一个站点并创建我自己的自定义模块。我一直在关注几个教程,到目前为止都很好。

我不明白 .ShapeHelper() 方法是如何工作的,这给我带来了一些麻烦。

以下代码来自我的驱动程序文件,可以正常工作并在前端生成我的视图。

protected override DriverResult Display(SubscribersFormPart part, string displayType, dynamic shapeHelper)
        {    
            // setup model
            part.DateStamp = System.DateTime.Now;
            return ContentShape("Parts_SubscribersForm", () => shapeHelper.DisplayTemplate(TemplateName: "Parts/SubscribersForm", Model: part, Prefix: Prefix));
        }

但是,我在其他教程中看到,而不是DisplayTemplate使用零件/视图的名称来代替..这是我更愿意使用的,尤其是在使用形状跟踪模块时,看到“DisplayTemplate”会有点令人困惑(如在下图..) 而不是一个更容易识别的名字

在此处输入图像描述

我试过简单地将我的方法更改为:

protected override DriverResult Display(SubscribersFormPart part, string displayType, dynamic shapeHelper)
        {    
            // setup model
            part.DateStamp = System.DateTime.Now;
            return ContentShape("Parts_SubscribersForm", () => shapeHelper.Parts_SubscribersForm(TemplateName: "Parts/SubscribersForm", Model: part, Prefix: Prefix));
        }
  • 注意“Parts_SubscribersForm()” - 虽然当我这样做时我收到以下错误......

在此处输入图像描述

我相信这与我的视图所在的位置有关,尽管我也相信我在 Orchard 需要的正确文件夹中拥有这些视图。这是我的观点所关注的文件夹结构......

在此处输入图像描述

谁能指出我正确的方向 - 我可以在 shapeHelper 方法中使用我的零件名称,而不是“DisplayContent”?

4

1 回答 1

7

将您的显示模板直接放在Views文件夹 ( /Views/Parts.SubscribersForm.cshtml) 中,而不是放在DisplayTemplates. 按照惯例,OrchardViews仅在查找形状模板时才扫描文件夹。EditorTemplates另一方面,该子文件夹包含零件编辑器的模板,即。Editor从驱动程序方法返回的那些形状。

那动态shapeHelper的东西是什么?简而言之 - 它是一个形状工厂。当你打电话时。shapeHelper.SomeShape(Foo: 1, Bar: "baz"),它返回一个对应于SomeShape.cshtml模板的形状对象,具有包含属性Foo和的动态模型Bar。该模板必须位于Views模块或主题文件夹中的某个位置。这或多或少是所有的魔法。

如果您想更多地了解形状 - 这是一个很好的起点:http ://docs.orchardproject.net/Documentation/Accessing-and-rendering-shapes 。

于 2013-08-05T18:45:07.647 回答