【问题标题】:How to style a Widget in Orchard?如何在 Orchard 中设置小部件的样式?
【发布时间】:2011-12-13 19:06:28
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    也可以这样做:

     var title = Model.ContentItem.WidgetPart.Title
    

    【讨论】:

    • 谢谢伯特兰。我将把代码放在哪里来清除包装器?这是一种推荐的小部件样式方式,还是我应该覆盖包装器而不是 Widget-BlogArchives.cshtml?我仍在尝试掌握这里的所有概念以及最佳实践。
    • 您可以将该代码放在您的小部件模板覆盖中。像 widget-blogarchives.cshtml 之类的东西,具体取决于您要执行的操作(查看形状跟踪中的可用替代项以确定您想要哪个;您可能想顺便添加小部件替代项功能,以获得更多可能性)。您不能替换包装器,因此覆盖小部件包装器模板将为所有小部件覆盖它。可能不是你想要的。所以是的,这是一种非常合理的做事方式。
    • 是的,我启用了替代功能,因此覆盖了 Widgets-BlogArchives.cshtml。我只是无法确定标题的来源,因为我在形状追踪工具中找不到它。
    • 附带说明:Model.Metadata.Wrappers.Clear() 还会在启用形状跟踪时清除形状跟踪包装。使用 'Model.Metadata.Wrappers.Remove("Widget_Wrapper")' 通过仅删除写入附加标签的包装器来解决此问题。
    猜你喜欢
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 2013-10-06
    相关资源
    最近更新 更多