我正在尝试在Orchard中构建一个主题(转换我现有的模板)但是在设置Blog Archives小部件时遇到了问题。我有一个区域“侧边栏”,我在其中放置了小部件。
为了让它输出我希望的标记,我在我的views文件夹中创建了一个新模板:Widget-BlogArchives.cshtml所有模板都将div中的内容包装在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中并将其更改为?
有人还可以解释模型中存储标题“The Archives”的位置吗?我在形状跟踪工具中查看了模型,但找不到它......
感谢。
更新
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。
答案 0 :(得分:4)
此标记来自窗口小部件包装器。可以通过调用Model.Metadata.Wrappers.Clear()来抑制包装器。然后,您可以从自己的窗口小部件覆盖中完全接管渲染。
如果您打开widget.wrapper.cshtml,您将找到第二个问题的答案:
var title = ((IContent)Model.ContentItem).As<WidgetPart>().Title;
也可以这样做:
var title = Model.ContentItem.WidgetPart.Title