2012-04-04 14 views
1

オーチャードでリストをリンクするにはどうすればよいですか?オーチャードCMSのリストのリンク

たとえば、私は1つの企業リストと1つのプロジェクトリストを持っています。私はプロジェクトを作成するときに、会社と結びつけたいと思っています。理想的には、私が作成した会社があらかじめ設定されたドロップダウンボックスです。

どうすればいいですか?

P.S.私はオーチャード1.3を使用しています

多くのありがとう!

答えて

0

Orchardのドキュメント1-N/N-Nの例を参照して、エディタビューでチェックボックスまたはドロップリストを事前入力する例を参照してください。

ドロップリストを使用して2つの異なる部分間の関係を設定する例を見るには、CodeplexまたはOrchardギャラリーのFeaturedItemSliderまたはContentSlider(元のもの)Orchardモジュールを見てください。

  1. CompanyPart型のプロパティを持つようにProjectPartを更新します(これらは、モデルに使用されている名前とみなされます)。
  2. Migrations.csで、ProjectPartRecordテーブルを更新して、タイプがintのCompanyPartRecord_Id列を持つようにします。 Orchardは、ProjectPartRecordテーブルをCompanyPartRecordテーブルに結合できるように、NHibernateでマッピングを設定します。
  3. ProjectPartDriverクラスコンストラクターを更新して、パラメーターをIRepositoryに設定します。インスタンスを同じタイプの読み取り専用クラスプロパティ(_companiesRepoのような名前)で保存します。
  4. ProjectPartDriver .Editor()メソッドを更新して_companiesRepoから会社の一覧を取得します。
  5. 他のProjectPartDriver .Editor(ポストバックを処理する)メソッドを更新して、ProjectPartのCompanyPartプロパティをドロップダウンリストで選択したCompanyに設定します。ドリップリストの会社IDを使用してdbからCompanyPartを検索します。私はviewModelsを使用して作業を容易にしていますので、私のバージョンは次のようになります。projectPart.CompanyPart = _companiesRepo.Get(companyId)
  6. DropPlistをレンダリングするためにProjectPartのeditorTemplateを更新します。

この関係をフロントエンドでどのように使用するかはわかりません。それについては2つの方法があります。 (1)Routeと一致するカスタムコントローラを作成できます。コントローラには、設定した関係に基づいてパーツを検索するコードがあります。または、(2)ProjectPartDriver.Display()メソッドで、 IContentManagerを使用したルックアップ。

+0

ああ、私はカスタムモジュールを作成していません。 CMSにリストを作成するだけです。ビューから手動でリストを照会する最良の方法は何ですか?独自のSQLクエリを記述しますか?エレガントな方法はありますか?私はMVCで新しいです:|ありがとう! – NomadTraveler

+0

多くの方法があります。 linq、HQL、または純粋なSQLを使用できます。あなたがハックな解決策を実行している場合、Display()メソッドの中でクエリを配置する最も良い場所はDriverクラスであるかもしれません。いくつかのモジュールがありますが、私はrandompeteと考えています。これは、コードを書くことなくコンテンツ部分をリンクすることができるかもしれません。私はそれらを使用していないので、私は入力を与えることはできません。私はそれがScienceProject、またはMechanicsと呼ばれていると思います。 –

関連する問題