0

画像ギャラリーのカスタム表示を提供するために List.cshtml を実装しました。プロジェクションをテンプレートでオーバーライドしようとしたのはこれが初めてで、最初はうまくいくように見えました。次に、バックエンド Orchard 1.7 の Projection にアクセスしようとすると、次のように失敗することに気付きました。

RuntimeBinderException 'Orchard.ContentManagement.ContentItem' に 'TagsPart' の定義が含まれていません

テンプレート List.cshtml のコードを次に示します。

List<TagRecord> uniqueTags = new List<TagRecord>();
List<dynamic> items = Model.Items;

if (items != null && items.Any())
{
    foreach (var item in items)
    {
        if (item != null && item.ContentItem != null)
        {
            TagsPart part = item.ContentItem.TagsPart;
            if (part != null && part.CurrentTags != null)
            {
                foreach (var t in part.CurrentTags)
                {
                    if (!uniqueTags.Contains(t))
                    {
                        uniqueTags.Add(t);
                    }
                }
            }
        }
    }

私は、エラーの原因であると思われるいくつかの点について無知です。

  1. Projection のテンプレートを指定する方法 ('List.cshtml' より具体的)。Placement.info を使用できますか? どのように?

  2. ContentItem 内の特定の部分の存在をテストするにはどうすればよいですか? 割り当てるだけTagsPart part = item.ContentItem.TagsPart;で上記の例外がスローされます。

更新:これをモジュールとして実装しました。つまり、List.cshtml は単純なモジュールの Views フォルダーにありました。List.cshtml をテーマに移動すると、問題はなくなります。ただし、レイアウトがテーマに依存しないように、モジュールを使用することをお勧めします。

4

2 に答える 2

1

Orchard 1.7 には、「Shape」と呼ばれる新しいクエリ レイアウト プロバイダーが含まれています。このプロバイダーを単純に使用し、「LightboxIsotope」のシェイプ タイプを指定して、「LightboxIsotope.cshtml」というビューを作成しました。

于 2013-08-16T00:27:09.737 に答える
0

プロジェクションでは、リストの各プロパティに対してレンダリングされる html をカスタマイズできます。これを達成するには、クエリに移動して新しいレイアウトを追加し、必要なプロパティを選択して、必要なものをすべて設定する必要があります。

クエリ モジュールで提供されるレイアウトが要件を満たさない場合は、いつでも独自のレイアウト プロバイダーを作成できます。このブログ投稿に例を示します。

http://www.stevetaylor.me.uk/image-carousel-using-twitter-bootstrap-and-orchard-cms-projections

于 2013-08-07T12:55:28.253 に答える