4

Orchard でのリストのレンダリングを引き継いで、カスタム マークアップを作成できるようにしました (リストの実際のコンテンツの前にインタラクティブなナビゲーションを作成する必要があります)。これは私が現在使用しているコードです:

@Orchard.DisplayManagement.Shapes を使用します。

@{
    var list = Model.List;
    var items = list.Items;
    var count = items.Count;
    var listTag = Tag(list, "ul");
    listTag.AddCssClass("historia");
    var index = 0;
}

<div class="produtos">
    @foreach (var item in items)
    {
        var itemTag = Tag(item, "div");
        itemTag.AddCssClass("item-" + index);
        @itemTag.StartElement;
        <h3>
        @item.Title
        </h3>
        <p>@item.MyCustomTextField</p>
        @itemTag.EndElement;
        ++index;
    }
</div>

@Display(Model.List)

@Display(Model.Pager)

それはほとんど機能します...リスト項目フィールドにアクセスできません...タイトルを取得してh3内に配置し、それに続く段落にカスタムテキストフィールドを配置したいです...私はCSS を使用して、このナビゲーション パーツを正しくレンダリングします。このナビゲーション部分の後で、標準のリスト レンダリング ルーチンを呼び出します。

問題は、@item.Title が null/空の文字列を生成することです。「ナビゲーションペイン」に表示される投稿全体の抜粋であるカスタムテキストフィールドを含むアイテムコンテンツ(しゃれは意図されていません)にアクセスしたいと思います。

Bertrand は、ブログ投稿でそれを行う方法を示しています。

@using Orchard.ContentManagement;
@{
    IEnumerable<object> blogPosts =
        Model.ContentItems.ContentItems;
}
@if (blogPosts == null || blogPosts.Count() < 1) {
<p>@T("No posts.")</p>
}
else {
    <ul class="content-items">
    @foreach (dynamic post in blogPosts) {
        string title = post.Title;
        ContentItem item = post.ContentItem;
        <li class="content-item-summary">
            @Html.ItemDisplayLink(title, item)
        </li>
    }
    </ul>
}

ただし、標準のリストでは同じようには機能しません。

(もう 1 つの小さな質問: このリストのレイアウト全体をオーバーライドする代わりに、カスタム ラッパーを使用できた/すべきでしたか?)

4

1 に答える 1

5

ブログの例は大きく異なります。リストの場合、アイテムにあるのは図形であり、コンテンツアイテムではありません。現在、これらの図形には、通常はContentItemプロパティの下に、対応するコンテンツアイテムへの参照が含まれていることがよくあります(常にではありません)。たとえば、タイトルを取得するにitem.ContentItem.TitlePart.Titleは、必要なものを提供します。

ラッパーの質問については、何をしようとしているのかわからないので、アドバイスはできません。リストのレンダリングをそのまま維持し、追加のマークアップで囲む場合は、そうです。これが1つの方法です。

于 2012-10-08T22:39:54.493 に答える