嗨再次:)我关于Orchard CMS的下一个问题看起来微不足道但是......
我的自定义NewsModule具有NewsItem
类型,其中包含TitlePart
,BodyPrt
和我的自定义NewsPart
。 NewsPart
基于NewsPartRecord
。
现在我必须使用Image扩展我的NewsItem
文档类型。到目前为止,我发现有ImagePart
和MediaLibraryPickerField
。
ImagePart
存储width
和heihgt
图片,因此我认为它适合内部使用。
下一个是MediaLibraryPickerField
。谷歌搜索了一段时间后,我发现我可以使用NewsPart
方法扩展我的WithField()
。
但!第一个问题:当我使用管理员界面配置Page
类型时,我可以向type
添加字段。但是使用Migrations
我无法将字段添加到NewsItem
,只能添加到NewsPart
。
这里的第二个问题。 MediaLibraryPicker允许我从库,图像,文本,zip或任何其他文件中选择任何类型的文件。这不是我真正需要的。
那么,Orchard使用图标扩展Items的最佳做法是什么?
感谢。
答案 0 :(得分:2)
您可以向NewsItem添加字段,它只需要不同类型的定义。它也使我感到困惑,因为它不像你想的那样直观。
添加使用 AlterTypeDefinition 的部件。
this.ContentDefinitionManager.AlterTypeDefinition(
"NewsItem",
cfg => cfg.WithPart("NewsPart"));
但是要添加字段,您还必须使用 AlterPartDefinition 并指定NewsItem而不是NewsPart。
this.ContentDefinitionManager.AlterPartDefinition(
"NewsItem",
builder =>
builder.WithField(
"NewsImages",
fieldBuilder =>
fieldBuilder.OfType("MediaLibraryPickerField")
.WithDisplayName("News Images")
// Allow multiple images
.WithSetting("MediaLibraryPickerFieldSettings.Multiple", "true"))
考虑到第二个问题,MediaLibraryPickerField可以选择只显示选定的类型/部分。
.WithSetting(MediaLibraryPickerFieldSettings.DisplayedContentTypes="Document,Video")
如果您需要新媒体类型,则必须使用Stereotype“Media”创建新的ContentType,它还需要“MediaPart”以及定义该类型元数据的部分。您可以查看如何为示例代码定义文档或视频。