果园 MediaPickerField 到 MediaLibraryPickerField
Orchard MediaPickerField to MediaLibraryPickerField
我目前正在尝试将网站从 Orchard 1.6 更新到 1.8。
运行 在媒体 -> 媒体库步骤中解决一些问题。
我们的 Migrations.cs
中有这个
SchemaBuilder.CreateTable(typeof(CarouselRecord).Name, table => table
.ContentPartRecord()
.Column<string>("Interval", column => column.WithDefault(""))
.Column<string>("MinHeight", column => column.WithDefault(""))
);
ContentDefinitionManager.AlterPartDefinition(
typeof(CarouselPart).Name, cfg => cfg
.WithField("CarouselImage1", fieldBuilder => fieldBuilder.OfType("MediaPickerField").WithDisplayName("Img1"))
.WithField("CarouselImage2", fieldBuilder => fieldBuilder.OfType("MediaPickerField").WithDisplayName("Img2"))
.WithField("CarouselImage3", fieldBuilder => fieldBuilder.OfType("MediaPickerField").WithDisplayName("Img3"))
.WithField("CarouselImage4", fieldBuilder => fieldBuilder.OfType("MediaPickerField").WithDisplayName("Img4"))
.Attachable()
);
ContentDefinitionManager.AlterTypeDefinition("CarouselWidget", cfg => cfg
.WithPart(typeof(CarouselPart).Name)
.WithPart("WidgetPart")
.WithPart(typeof(CommonPart).Name)
.WithSetting("Stereotype", "Widget")
);
在禁用媒体模块并启用媒体库模块(并迁移媒体文件和媒体选择器字段)后,它完全停止工作,在 .cshtml 中的这一行崩溃:
<div class="item"><a href="@Model.ContentPart.CarouselImage2.AlternateText"><img src="@(Href(Model.ContentPart.CarouselImage2.Url))" alt="" /></a></div>
首先,我尝试更新模板以改为使用 MediaLibraryPickerFields,但没有成功。
原来,当我转到管理 -> 小部件 -> 编辑小部件时,小部件的媒体字段消失了。
是我在更新过程中做错了什么,还是我必须在 Migrations.cs 中编写新的更新以删除 MediaPickerFields 并改为添加 MediaLibraryPickerFields?
3 个月没有回复,我以为我会关闭它。
我最终做的是删除 MediaPickerFields
ContentDefinitionManager.AlterPartDefinition(
typeof(CarouselPart).Name, cfg => cfg
.RemoveField("CarouselImage1")
.RemoveField("CarouselImage2")
.RemoveField("CarouselImage3")
.RemoveField("CarouselImage4")
.Attachable()
);
然后改为添加 MediaLibraryPickerField
ContentDefinitionManager.AlterPartDefinition(
typeof(CarouselPart).Name, cfg => cfg
.WithField("CarouselImages", fieldBuilder => fieldBuilder.OfType("MediaLibraryPickerField").WithDisplayName("Images").WithSetting("MediaLibraryPickerFieldSettings.Multiple", "true"))
.Attachable()
);
由于数据丢失,不是最佳选择,但在这种情况下这不是什么大问题。
我目前正在尝试将网站从 Orchard 1.6 更新到 1.8。 运行 在媒体 -> 媒体库步骤中解决一些问题。
我们的 Migrations.cs
中有这个SchemaBuilder.CreateTable(typeof(CarouselRecord).Name, table => table
.ContentPartRecord()
.Column<string>("Interval", column => column.WithDefault(""))
.Column<string>("MinHeight", column => column.WithDefault(""))
);
ContentDefinitionManager.AlterPartDefinition(
typeof(CarouselPart).Name, cfg => cfg
.WithField("CarouselImage1", fieldBuilder => fieldBuilder.OfType("MediaPickerField").WithDisplayName("Img1"))
.WithField("CarouselImage2", fieldBuilder => fieldBuilder.OfType("MediaPickerField").WithDisplayName("Img2"))
.WithField("CarouselImage3", fieldBuilder => fieldBuilder.OfType("MediaPickerField").WithDisplayName("Img3"))
.WithField("CarouselImage4", fieldBuilder => fieldBuilder.OfType("MediaPickerField").WithDisplayName("Img4"))
.Attachable()
);
ContentDefinitionManager.AlterTypeDefinition("CarouselWidget", cfg => cfg
.WithPart(typeof(CarouselPart).Name)
.WithPart("WidgetPart")
.WithPart(typeof(CommonPart).Name)
.WithSetting("Stereotype", "Widget")
);
在禁用媒体模块并启用媒体库模块(并迁移媒体文件和媒体选择器字段)后,它完全停止工作,在 .cshtml 中的这一行崩溃:
<div class="item"><a href="@Model.ContentPart.CarouselImage2.AlternateText"><img src="@(Href(Model.ContentPart.CarouselImage2.Url))" alt="" /></a></div>
首先,我尝试更新模板以改为使用 MediaLibraryPickerFields,但没有成功。 原来,当我转到管理 -> 小部件 -> 编辑小部件时,小部件的媒体字段消失了。
是我在更新过程中做错了什么,还是我必须在 Migrations.cs 中编写新的更新以删除 MediaPickerFields 并改为添加 MediaLibraryPickerFields?
3 个月没有回复,我以为我会关闭它。 我最终做的是删除 MediaPickerFields
ContentDefinitionManager.AlterPartDefinition(
typeof(CarouselPart).Name, cfg => cfg
.RemoveField("CarouselImage1")
.RemoveField("CarouselImage2")
.RemoveField("CarouselImage3")
.RemoveField("CarouselImage4")
.Attachable()
);
然后改为添加 MediaLibraryPickerField
ContentDefinitionManager.AlterPartDefinition(
typeof(CarouselPart).Name, cfg => cfg
.WithField("CarouselImages", fieldBuilder => fieldBuilder.OfType("MediaLibraryPickerField").WithDisplayName("Images").WithSetting("MediaLibraryPickerFieldSettings.Multiple", "true"))
.Attachable()
);
由于数据丢失,不是最佳选择,但在这种情况下这不是什么大问题。