2012-05-31 103 views
4

在自定义ContentPart的模块中,如何将字段设置为文本字段?Orchard CMS 1.4:将文本字段添加到自定义ContentPart

在我migrations.cs类,我创建了表的一部分:

public int UpdateFrom1() 
     { 
      SchemaBuilder.CreateTable("RightContentPartRecord", table => 
       table.ContentPartRecord() 
        .Column<string>("Html"));              
      return 2; 
     } 

所以,我有一个称为HTML列。我想使用所见即所得的编辑器,所以我被告知我需要一个文本字段才能使它“开箱即用”。

但是,这不会发生在我身上,所以我需要做些什么才能将名为Html的列转换为零件上的文本字段?

我该如何配置它以使用所见即所得的编辑器?

回答

5

文本字段与部件属性不同。字段不作为自己的数据库列存储。下面是如何将一个字段从迁移添加到零件的例子:

 ContentDefinitionManager.AlterPartDefinition("Product", 
      builder => builder.WithField("ProductImage", fieldBuilder => fieldBuilder.OfType("MediaPickerField").WithDisplayName("Product Image"))); 

对于文本字段,你想也需要通过添加.WithSetting("Flavor", "html")到外地生成器来设置风味设置。

+0

谢谢我已经到了那里,现在我的问题是,由于该字段不是该部分的模型的一部分,因此它不是该形状的一部分。所以当我尝试放置零件时(使用Pete Hurst的ZoneProxy代码),结果表明该字段是具有通用名称的不同形状的一部分,所以不能放置。有没有办法让场地成为形状的一部分?或者控制字段的形状名称,以便我可以单独精确放置它(并且不要将所有其他字段形状放在页面上,并且名称相同,例如Field_Common_Text)? – awrigley

+0

或者有没有办法使一个领域的一部分属性,以便它共享形状... – awrigley

+0

不。那不是你需要的领域。看看身体部位是如何构建的并将其复制到您的身上。 –

8

如果您希望将自己的自定义内容部分的属性显示为htmleditor,请在部件的editortemplate中将其配置为如下形式。

@Script.Require("OrchardTinyMce") 
@Html.TextAreaFor(x => x.Header, new { @class = "html tinymce" }) 

在这种情况下,'Header'属性显示为一个html编辑器。

如果您需要更多的部分,可以考虑为它编写一个Html扩展或编辑器模板。

+1

这非常好,适用于零件上的任意'string'属性。对于我来说,一个轻微的“陷阱”,我必须在调用'@ Script.Require'之前定义javascript vars'mediaPickerEnabled'和'mediaLibraryEnabled' *以保持TinyMce脚本的快乐。 – kaveman

+0

(顺便说一句,未来的读者,我有这个工作在1.7.2安装) – kaveman

相关问题