2012-01-21 6 views
3

オーチャード・サイトには、Productというコンテンツ・タイプがあります。コンテナとルーティング可能なパーツがあります。製品には、ProductFeatureという名前のコンテンツタイプを含めることができます。オーチャード・コンテナのアイテムをリストするには?

ルートURLを参照するときに、Content-Product.cshtmlビューをオーバーライドしてhtmlを変更しました。 このビューの中に、製品に含まれるすべてのProductFeatureのリストを取得するにはどうすればよいですか?

この投稿は、ブログウィジェットでこれを行う方法を示しています。 http://weblogs.asp.net/bleroy/archive/2011/03/27/taking-over-list-rendering-in-orchard.aspx

私は、製品のコンテンツビューでこれを行う方法を見つけるのに苦労しています。上の例のコードはnull例外エラーをスローするため、モデル構造が異なる必要があります。私はShape Tracingを使ってモデルを調べたり、Visual Studioでデバッグしたりしましたが、含まれている項目が見つかりませんでした。

ご協力いただければ幸いです。

+0

はなかったですあなたはこれを理解することができますか?私は同じことをやろうとしており、バートランド・ルイ・ロイの答えを理解することはできません。 – ihake

答えて

2

placement.infoにコンテナ部分が含まれていることを確認した場合は、機能のリストが既に表示されているはずです。

+0

私はトップレベルのビューでwithからアイテムにアクセスしたいと思っています。それを行う方法はありますか? – ericpberry

+0

コンテナがコンテンツアイテムである場合、CommonPartRecordのコンテンツマネージャにクエリを実行できます。 –

+0

@BertrandLeRoy上記のあなたのコメントにあなたが言及したクエリの例を挙げることができますか?コンテナのコンテンツ部分を持つコンテンツタイプの別のビュー内でこれを行うことができますか? – ihake

2

私は2つのオプションを使用しています(私はバートランドが彼が他の多くのツールを提供するために熱心に働いているので、醜く不必要であると知っていますが、オーチャードの美しさと独創性で、あなたはこれらのハックを必要とする)

をだからここ2、次のとおりです。

  1. 部分図の内側Parts.Container.Contained-YourContentTypeName.cshtml

    を作成します。Content-YourContentTypeName.cshtml

  2. var yourList = Model.Content.Items[1].List.Items; 
    

少なくともそれは私の場合Items[1]では、リストがどこにあるモデルでトレース形状を確認することができます。そして、ここからすべては1)と同じです。

私は数週間前と同じように、この解決策を探して、それはスレッドをつまずく誰かを助けることを願っています。

0

あなたがアイテムコンテナの位置は、あなたがLINQを使用することができますリストをハードコードしたくない場合は、ゾランの答えに展開するには:

IEnumerable<dynamic> items = Model.Content.Items; 
var container = (from item in items 
       where (item.ContentPart.PartDefinition.Name == "ContainerPart") 
       select item).ElementAt(0); 

...

@Display(container.List.Items) 
関連する問題