0

私は単純だと思っていたものに苦労してきました。

Supplier というコンテンツ タイプがあります。このサプライヤには、連絡先住所と訪問先住所の 2 つの住所を含む連絡先情報があります。サプライヤには、北の場所や南の場所など、いくつかの場所もあります。場所も住所です。したがって、基本的に、多くのアドレスを持つコンテンツ アイテムのサプライヤがあり、それらすべてに独自のタイプがあります。

移行:

        public int Create() {
        //Creating the Location contentrecord, contentpart and contenttype
        SchemaBuilder.CreateTable("LocationPartRecord", table => table
                                                                     .ContentPartRecord()
                                                                     .Column<int>("LocationsPartRecord_id")
            );

        ContentDefinitionManager.AlterPartDefinition("LocationPart", part => part
                                                         .Attachable(false)
                                                         .WithField("LocationName", f => f.OfType("TextField"))
                                                         .WithField("AddressLine1", f => f.OfType("TextField"))
                                                         .WithField("AddressLine2", f => f.OfType("TextField"))
                                                         .WithField("Zipcode", f => f.OfType("TextField"))
                                                         .WithField("City", f => f.OfType("TextField"))
                                                         .WithField("Country", f => f.OfType("TextField")));

        ContentDefinitionManager.AlterTypeDefinition("Location",
                                                     cfg => cfg
                                                                .WithPart("CommonPart")
                                                                .WithPart("LocationPart")
            );

        //Creating the Locations 'container' contentpart
        SchemaBuilder.CreateTable("LocationsPartRecord", table => table
                                                                      .ContentPartRecord()
            );

        ContentDefinitionManager.AlterPartDefinition("LocationsPart", builder => builder.Attachable());

        //Creating the supplier. Specific supplier contentfields can be added later. Doing records, so I can add
        //datafields later that are not contentfields
        SchemaBuilder.CreateTable("SupplierPartRecord", table => table
                                                                     .ContentPartRecord());

        ContentDefinitionManager.AlterPartDefinition("SupplierPart", part => part
                                                                                 .Attachable(false)
            );

        ContentDefinitionManager.AlterTypeDefinition("Supplier", builder => builder
                                                                                .Creatable()
                                                                                .Draftable()
                                                                                .WithPart("CommonPart")
                                                                                .WithPart("TitlePart")
                                                                                .WithPart("BodyPart")
                                                                                .WithPart("AutoroutePart", partBuilder =>
                                                                                                           partBuilder.WithSetting("AutorouteSettings.AllowCustomPattern", "true")
                                                                                                               .WithSetting("AutorouteSettings.PatternDefinitions", "[{Name:'Supplier', Pattern: 'aanbieders/{Content.Slug}', Description: 'aanbieders/supplier-name'}]")
                                                                                                               .WithSetting("AutorouteSettings.DefaultPatternIndex", "0"))
                                                                                .WithPart("SupplierPart")
                                                                                .WithPart("LocationsPart"));

        return 1;
    }

モデル: * LocationPartRecord および LocationPart *

public class LocationPartRecord:ContentPartRecord {
    public virtual LocationsPartRecord LocationsPartRecord { get; set; }
}

public class LocationPart:ContentPart<LocationPartRecord> {
    LocationsPartRecord LocationsPartRecord {
        get { return Record.LocationsPartRecord; }
        set { Record.LocationsPartRecord = value; }
    }
}

LocationsPartRecord および LocationsPart (コンテナ) public class LocationsPartRecord:ContentPartRecord {

    public LocationsPartRecord()
    {
        Locations = new List<LocationPartRecord>();
    }

    [CascadeAllDeleteOrphan]
    public virtual IList<LocationPartRecord> Locations { get; set; }
}

public class LocationsPart:ContentPart<LocationsPartRecord> {

    public LocationsPart() {
        Locations = new List<LocationPart>();
    }

    public readonly LazyField<IList<LocationPart>> _locations = new LazyField<IList<LocationPart>>();

    public IList<LocationPart> Locations {
        get { return _locations.Value; }
        set { _locations.Value = value; }
    }
}

ここから私は立ち往生しています。新しいサプライヤーを作成するときに、サプライヤーのすべてのコンテンツ項目フィールドと場所のリストを含む画面が表示され、場所を作成、削除、または更新できることを確認したいと思います。

コードを詳しく説明する必要はありませんが、指示だけで十分です。どのドライバー、コントローラー、およびビューを作成する必要がありますか。これは管理コンソール専用です。フロントエンドの場合、場所は表示する必要があり、編集する必要はありません。

4

3 に答える 3

0

これが役立つかどうかはわかりませんが (サイトがダウンしているように見えますが、ロードするのを我慢していれば、Google にはキャッシュされたバージョンがあります)、まさにあなたの状況についての良いブログがあります. スカイウォーカー優秀ウェブショップシリーズです。パート 8 には、複数のアドレスに関連するコード (Address と Addresses を使用) が含まれていると思います。これはあなたの問題に関係しているようで、コードが必要なものかもしれません。

サイトにアクセスできない場合のために、コード用のCodePlexリポジトリもあります。さらに、Bertrand のNwazet Commerceモジュールにも同様のコードが含まれている可能性があります。

于 2012-12-05T12:50:27.087 に答える
0

カスタム コーディングなしで目的の機能を実現する方法はないと思います。あなたが示唆したように、コメントモジュールはコピーする良い例かもしれません. コメント モジュールのコントローラは、所属するコンテンツ アイテムとは別に、独自の管理ページ内のすべてのコメントを管理するだけです。コメントの編集/表示は、引き続きドライバーとハンドラーを介して提供されます。

コメント モジュールの類推を使用すると、次のようになります。

CommentsPart = AddressesPart - これは Supplier コンテンツ タイプに追加されます

CommentPart = AddressPart - これは Address コンテンツ タイプに追加されます

コメントを管理するために含まれている多くの余分な機能を取り除いて、これら 2 つの部分のドライバー、ハンドラー、ビュー、およびモデルをコピーするだけで済みます。

管理インターフェイスを介してこれらの関係を構築できるいくつかのギャラリー モジュールを見てきましたが、私自身は使用していません: http://gallery.orchardproject.net/List/Modules/Orchard.Module.Downplay.Mechanics

于 2012-11-20T22:44:46.160 に答える
0

住所は一部ではなく、フィールドである必要があります。このようにして、複数持つことができ、それぞれに名前を付けることができます。

于 2012-11-21T00:40:21.720 に答える