2012-10-08 22 views
4

我已經接管了Orchard中List的渲染,以便能夠創建自定義標記(我需要在列表的實際內容之前創建交互式導航)。這是我目前使用的代碼:如何在Orchard中自定義渲染列表時訪問項目零件

@using 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產生一個空/空字符串。我想訪問項目內容(無雙關語),其中包括一個自定義文本字段,該字段是將在「導航窗格」中顯示的整個帖子的摘錄。

伯特蘭告訴我們如何做,與博客文章:

@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> 
} 

但它不工作標準中列出了相同的方式。

(另一個小問題:可以/我應該使用自定義的包裝,而不是覆蓋整個佈局此列表中?)

回答

5

博客的例子是非常不同的。在列表的情況下,你在項目中有什麼是形狀,而不是內容項目。現在,這些形狀通常(但不總是)具有對應的內容項的引用,通常在ContentItem屬性下。例如,要獲得標題,item.ContentItem.TitlePart.Title會給你你想要的。

至於你的包裝問題,我不知道你在做什麼,所以我不能給你建議。如果你想保持列表渲染完好,但用額外的標記包圍它,那麼是的,這是一種方法。

+0

它工作完美(再次!) – Loudenvier

相關問題