我正在使用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
部件/视图的名称而不是......我更愿意这样做,特别是在使用Shape Tracing模块时,它会让人感到有些困惑看到“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));
}
我认为这与我的观点所处的位置有关,但我也相信我在Orchard所需的正确文件夹中有这些。这是我的观点所涉及的文件夹结构......
任何人都能指出我正确的方向 - 我可以在shapeHelper方法中使用我的零件名称,而不是“DisplayContent”吗?
答案 0 :(得分:7)
将显示模板直接放在Views
文件夹(/Views/Parts.SubscribersForm.cshtml
)内,而不是DisplayTemplates
内。按照惯例,Orchard仅在查找形状模板时扫描Views
个文件夹。另一方面,EditorTemplates
子文件夹包含部分编辑器的模板,即。从驱动程序Editor
方法返回的那些形状。
那个动态的shapeHelper
是什么东西?简而言之 - 它是形状工厂。当你打电话的时候。 shapeHelper.SomeShape(Foo: 1, Bar: "baz")
,它返回一个与SomeShape.cshtml
模板对应的形状对象,其动态模型包含属性Foo
和Bar
。该模板必须位于模块或主题的Views
文件夹中的某个位置。这或多或少都是魔术。
如果你想更多地了解形状 - 这是一个很好的起点:http://docs.orchardproject.net/Documentation/Accessing-and-rendering-shapes。