如何在Orchard中设置Widget的样式?

时间:2011-10-24 00:36:10

标签: asp.net asp.net-mvc asp.net-mvc-3 razor orchardcms

我正在尝试在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。

1 个答案:

答案 0 :(得分:4)

此标记来自窗口小部件包装器。可以通过调用Model.Metadata.Wrappers.Clear()来抑制包装器。然后,您可以从自己的窗口小部件覆盖中完全接管渲染。

如果您打开widget.wrapper.cshtml,您将找到第二个问题的答案:

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

也可以这样做:

 var title = Model.ContentItem.WidgetPart.Title