【问题标题】:Alternate shape for EditorTemplate of Field is not being recognized字段的 EditorTemplate 的替代形状未被识别
【发布时间】:2018-01-24 23:40:12
【问题描述】:

当字段具有特定名称 (PublishingMethod) 时,我需要使用枚举器字段的 EditorTemplate 替代。

基于docs,我在与原始形状相同的文件夹中创建了一个模式为 [ShapeType__FieldName] 的视图:

这不起作用,仍然使用原件。我曾想过在 Driver 中更改 Editor 方法,但我认为这违背了替代方法的目的,即 Orchard 自动检测到我从文档中了解的正确形状:

Orchard 框架会自动创建许多可供您在应用程序中使用的替代项。但是,您可以为这些替代形状创建模板。

注意:我无法使用 Shape Tracing 模块,即使安装了全新的 Orchard,它也无法正常工作。

【问题讨论】:

  • 您想在哪里使用该模板?在管理员?请注意,您不应该在不属于您的模块中更改或添加文件。
  • 要调试它,您可以实现IShapeTableProvider 并查看形状表和找到的替代品。如果您的替代品不在其中,则可能命名错误,或者根本没有实现自动添加您的替代品(在这种情况下,您可以自己在实现中添加替代品)。
  • @BertrandLeRoy 是的,在管理员中编辑内容时,我想对具有此名称的 EnumeratorFields 使用我自己的控件。替代品将在我的主题中,现在它与原版一起丢弃路由或命名错误,同时让它工作

标签: orchardcms orchardcms-1.10


【解决方案1】:

Orchard 中的编辑器的工作方式与 Display 的工作方式不同。我想这是为了让您获得 MVC 风格的体验。基本上,返回的实际形状是 EditorTemplate 类型,然后绑定您的模型和前缀,然后使用您给它的模板名称呈现局部视图。这意味着替代品不会按预期或文档状态工作。您的字段名称的替代项实际上已添加到 EditorTemplate 形状中。因此,您可以添加一个名为 EditorTemplate-PublishingMethod.cshtml 的视图,其内容如下:

@{ 
    var m = (Orchard.Fields.Fields.EnumerationField)Model.Model;
}

@Html.Partial("PublishingMethodEditor", m, new ViewDataDictionary {
    TemplateInfo = new TemplateInfo { HtmlFieldPrefix = Model.Prefix }
})

然后添加另一个名为 PublishingMethodEditor.cshtml 的视图,其中包含您想要用于编辑器的覆盖。所有这些视图都应该放在 Views 文件夹的根目录中。

另一种方法是实现IShapeTableProvider 接口并在特定条件下调整TemplateName 属性,但是,嗯,这需要代码...

编辑 1 如果您在不想覆盖的其他内容类型上有该字段名称,则可以使用覆盖 EditorTemplate-ContentTypeName-PublishingMethod.cshtml

【讨论】:

  • 请注意,如果你想正确地做事,这个新视图需要进入一个管理主题(这在 Orchard 1.x 中并非易事)。另一个可能更明智的选择可能是构建自己的字段类型。您也没有指定确切的用例。很可能已经有一个完全适合您的领域供您使用,例如分类学。
  • 我猜您可能会将此视图覆盖放置在您自己的模块中,该模块可能会提供带有附加字段的部件,您希望为其自定义编辑器。当我需要这个时,我的要求是我们有一个演讲者分类和用于选择演讲者的编辑器,分类字段,需要显示演讲者姓名和缩略图,而不仅仅是默认的复选框列表。我当时认为它很愚蠢,现在我认为它很愚蠢,但是嘿
猜你喜欢
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
相关资源
最近更新 更多