代码之家  ›  专栏  ›  技术社区  ›  Clarence Klopfstein

获取OrchardCMS中HTML小部件的标题

  •  0
  • Clarence Klopfstein  · 技术社区  · 6 年前

    如何在Orchard CMS中获取HTML小部件的标题(在本例中为“默认”TripleFirst)?新问题,但我想不通。

    @if (Model.TripelFirst != null || Model.TripelSecond != null || Model.TripelThird != null) {
                    <div class="row">
                        @if (Model.TripelFirst != null) {
                            <div class="col-md-4 panel panel-success" runat="server" id="TripelFirst">
                                <div class="panel-heading">@Model.TripelFirst.Title()</div>
                                <div class="panel-body">@Model.TripelFirst.Body</div>
                            </div>
                        }
                        @if (Model.TripelSecond != null) {
                            <div class="col-md-4 panel panel-success" runat="server" id="TripelSecond">@Display(Model.TripelSecond)</div>
                        }
                        @if (Model.TripelThird != null) {
                            <div class="col-md-4 panel panel-success" runat="server" id="TripelThird">@Display(Model.TripelThird)</div>
                        }
                    </div>
                }
    
    2 回复  |  直到 6 年前
        1
  •  0
  •   Bertrand Le Roy    6 年前

    首先,你似乎混淆了区域和小部件。 TripelFirst 是一个区域,而不是一个小部件(请参见“ So what are zones really? “为了更深入地解释什么是区域)。一个区域应该被看作一个占位符,一个小部件将被添加到其中的容器。Orchard有一个丰富的组合模型,其中许多分离的服务参与页面的呈现。区域本身几乎不知道其中的内容,它只会在时间到来时将呈现委托给其内容(比如小部件)。因此,区域将不会提供最简单的方法来获取它包含的小部件的标题。 围绕

    一开始这看起来有点吓人,但是Orchard提供了一个非常好的工具,可以很容易地发现页面的形状结构。从开发人员机器上的设计器工具模块中启用“形状跟踪”功能(当然,不要在生产中激活此功能),您将在页面底部获得一个类似Firebug的调试面板,您可以使用它来探索形状/模板树、每个形状/模板的模型等。

    理解Orchard中的渲染所必需的另一个概念是placement文件,它主要描述表示内容项的形状应以何种顺序进行渲染。

    最后,控制进入 三足鼎立 区域中,找到需要使用形状跟踪在主题中覆盖的模板,然后修改此模板中的渲染,使其完全符合您的需要。

    下面是一个代码示例,您可以将其放入内容部分模板覆盖中(例如 Parts.Title.cshtml Title 部分,并将其显示为链接。

    @{
        Orchard.ContentManagement.ContentItem contentItem =
            Model.ContentPart.ContentItem;
        string title = Model.Title.ToString();
    }
    
    <h2>@Html.ItemDisplayLink(title, contentItem)</h2>
    
        2
  •  0
  •   Clarence Klopfstein    6 年前

    使用形状跟踪工具,它帮助我了解模型结构。现在我不是说果园团队希望这样做,但这就是我最终解决问题的方式。

    @if (Model.SideItems != null)
    {
        <div class="col-md-12">&nbsp;</div>
        var sideWidgetItems = ((IEnumerable<dynamic>)Model.SideItems.Items).Where(x => x.ContentItem.ContentType == "HtmlWidget");
        if (sideWidgetItems.Any())
        {
            foreach (var item in sideWidgetItems)
            {
               <div class="col-md-12">
                   <div class="panel panel-success">
                      <div class="panel-heading">@Html.Raw(item.ContentItem.Content.Parts[3].Title)
                      </div>
                      <div class="panel-body">@Html.Raw(item.ContentItem.Content.Parts[1].Text)
                      </div>
                  </div>
               </div>
            }
        }
    }