Asp.net

如何在 Orchard 中設置小元件的樣式?

  • November 4, 2011

我正在嘗試在 Orchard 中建構一個主題(轉換我擁有的現有模板),但是在設置部落格檔案小元件的樣式時遇到了問題。我有一個區域“側邊欄”,我在其中放置了小元件。

為了讓它輸出我想要的標記,我在我的視圖文件夾中創建了一個新模板:Widget-BlogArchives.cshtml 所有模板都將小元件的內容包裝在一個 div 中,如下所示:

<div class="box box_small">
   @Display(Model.Content)
</div>

所以我希望所有的小元件內容都在我的 div 中。然而生成的 HTML 看起來像這樣:

<article class="widget-blog-archives widget" shape-id="15">
 <header shape-id="15">
   <h1 shape-id="15">The Archives</h1>
 </header>
 <div class="box box_small" shape-id="15">
   <div class="archives" shape-id="16">
     <ul class="archiveMonthList" shape-id="16">
       <li class="first last" shape-id="16">
     <a href="(shortened)/10" shape-id="16">October 2011 (1)</a>
   </li>
 </ul>
   </div>
 </div>
</article>

我不明白整篇文章的包裝來自哪裡?如何將標題放入我的 div 並將其更改為 a ?

有人還可以解釋一下模型中標題“檔案”的儲存位置嗎?我在形狀跟踪工具中查看了模型,但找不到它…

謝謝。

更新

正如 Bertrand 解釋的那樣,我對 Widget-BlogArchives.cshtml 進行了一些更改:

@using Orchard.ContentManagement
@using Orchard.Widgets.Models
@{
 Model.Metadata.Wrappers.Clear();
 var title = ((IContent)Model.ContentItem).As<WidgetPart>().Title;
}
<div class="box box_small">
 <h3>@title</h3>
 @Display(Model.Content)
</div>

這現在生成了我想要的 HTML。

此標記來自小元件包裝器。可以通過呼叫 Model.Metadata.Wrappers.Clear() 來抑制包裝器。然後,您可以完全從您自己的小元件覆蓋中接管渲染。

如果您打開 widget.wrapper.cshtml,您將找到第二個問題的答案:

var title = ((IContent)Model.ContentItem).As<WidgetPart>().Title;

也可以這樣做:

var title = Model.ContentItem.WidgetPart.Title

引用自:https://stackoverflow.com/questions/7870349