Orchard MediaPickerField到MediaLibraryPickerField

时间:2015-12-17 14:07:36

标签: orchardcms

我目前正在尝试将网站从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,但没有运气。 事实证明,当我去管理员 - &gt;小部件 - &gt;编辑小部件,小部件的媒体字段消失了。

我是否在更新过程中出错了,或者我是否必须在Migrations.cs中编写新更新以删除MediaPickerField并添加MediaLibraryPickerFields?

1 个答案:

答案 0 :(得分:1)

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()
        );

由于数据丢失而不是最佳,但在这种情况下这不是一个大问题。