0

果樹園に問題があります。ビデオ プレーヤーであるウィジェットを作成しました。これはクラス ContentPartRecord を持つ単純なウィジェットです。

public class VideoPlayerPartRecord : ContentPartRecord
    {
        public virtual string MediaFile { get; set; }
        public virtual int Width { get; set; }
        public virtual int Height { get; set; }
        public virtual bool AutoStart { get; set; }
        public virtual bool Repeat { get; set; }
    }

およびクラス ContentPart:

    public class VideoPlayerPart : ContentPart<VideoPlayerPartRecord>
        {
            [Required(ErrorMessage = "Media File required")]
            [Display(Name = "Media File: ")]
            public string MediaFile
            {
                get { return Record.MediaFile; }
                set { Record.MediaFile = value; }
            }

            [Required(ErrorMessage = "Width required")]
            [Display(Name = "Width: ")]
            public int Width
            {
                get { return Record.Width; }
                set { Record.Width = value; }
            }

            [Required(ErrorMessage = "Height required")]
            [Display(Name = "Height: ")]
            public int Height
            {
                get { return Record.Height; }
                set { Record.Height = value; }
            }

            [Display(Name = "Auto Start: ")]
            public bool AutoStart
            {
                get { return Record.AutoStart; }
                set { Record.AutoStart = value; }
            }

            [Display(Name = "Repeat: ")]
            public bool Repeat
            {
                get { return Record.Repeat; }
                set { Record.Repeat = value; }
            }
        }

これはファイルの移行です:

    public class Migrations : DataMigrationImpl {

            public int Create() {
                // Creating table default_Raise_VideoPlayer_VideoPlayePartRecord
                SchemaBuilder.CreateTable("default_Raise_VideoPlayer_VideoPlayePartRecord", table => table
                    .ContentPartRecord()
                    .Column("MediaFile", DbType.String)
                    .Column("Width", DbType.Int32)
                    .Column("Height", DbType.Int32)
                    .Column("AutoStart", DbType.Boolean)
                    .Column("Repeat", DbType.Boolean)
                );

                ContentDefinitionManager.AlterPartDefinition(typeof(VideoPlayerPart).Name, cfg => cfg
                    .Attachable());

                return 1;
            }

            public int UpdateFrom1() {
                ContentDefinitionManager.AlterTypeDefinition("VideoPlayerWidget", cfg => cfg
                    .WithPart("VideoPlayerPart")
                    .WithPart("WidgetPart")
                    .WithPart("CommonPart")
                    .WithSetting("Stereotype", "Widget"));

                return 2;

            }


        }

問題は、ウィジェットを挿入すると追加されますが、表示されないことです。どうして??

4

1 に答える 1

1

ウィジェットがアイテムを永続化するための Handler と、それを表示するための placement.info エントリを追加する必要があります。

http://docs.orchardproject.net/Documentation/Writing-a-content-part

(コードは記事から引用)

using Maps.Models;
using Orchard.ContentManagement.Handlers;
using Orchard.Data;

namespace Maps.Handlers {
    public class MapHandler : ContentHandler {
        public MapHandler(IRepository<MapRecord> repository) {
            Filters.Add(StorageFilter.For(repository));
        }
    }
}

および Placement.info

<Placement>
    <Place Parts_Map="Content:10"/>
    <Place Parts_Map_Edit="Content:7.5"/>
</Placement>

データベースに保存されない場合は、おそらくハンドラーです。画面に表示されない場合は、placement.info である可能性があります。

また、ドライバーやビューがあるとは言いませんでしたが、欠落しているのはハンドラーまたは配置情報だと思います。また、パーツを手動で作成すると間違ったテキスト文字列を使用する可能性がある場所がいくつかあるため、ドライバー、移行、および配置情報を関連付けるときは、スペルと規則を十分に確認してください。

于 2013-06-05T19:28:17.150 に答える