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 つの小さな質問: このリストのレイアウト全体をオーバーライドする代わりに、カスタム ラッパーを使用できた/すべきでしたか?)