在OrchardCMS中获取HTML Widget的标题

问题描述 投票:0回答:2

如何在Orchard CMS中获取HTML小部件的标题(在本例中为“默认”TripelFirst)?新手问题,但我无法弄清楚。

这是代码,我只是无法弄清楚如何将标题放入“panel-heading”div中。

@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>
            }
orchardcms
2个回答
0
投票

首先,你似乎混淆了区域和小部件。 TripelFirst是一个区域,而不是一个小部件(有关区域的更深入解释,请参阅“So what are zones really?”)。应将区域视为占位符,即添加小组件的容器。 Orchard有一个丰富的组合模型,许多分离的服务参与页面的渲染。区域本身几乎不知道它内部的内容,它会在时间到来时将渲染委托给其内容(例如小部件)。因此,该区域将不提供获取其包含的小部件标题的最简单方法。到目前为止,在Orchard中自定义渲染的最简单方法是从正确的位置进行:D例如,在这种情况下,您可能希望覆盖窗口小部件的特定模板或其包装器的模板(所有形状)在Orchard中可以有包装器,这些包装器是围绕形状本身呈现的模板。

这可能看起来有些令人生畏,但Orchard提供了一个开箱即用的奇妙工具,可以很容易地发现页面的形状结构。从开发机器上的设计器工具模块启用“形状跟踪”功能(当然不会在生产中激活它),并且您将在页面底部获得一个类似Firebug的调试面板,您可以使用它探索形状/模板树,每个模型的模型等。

理解Orchard中渲染所必需的另一个概念是放置文件,它主要描述表示内容项的形状应该呈现的顺序。

最后,要控制进入TripelFirst区域的窗口小部件标题的渲染,请使用形状跟踪找到您需要在主题中覆盖的模板,然后在此模板中修改渲染,使其完全符合您的需要。

下面是一个代码示例,您可以将其置于内容部件模板覆盖(例如Parts.Title.cshtml)中,首先查找当前部件的内容项,然后转到Title部件,并将其显示为链接。

@{
    Orchard.ContentManagement.ContentItem contentItem =
        Model.ContentPart.ContentItem;
    string title = Model.Title.ToString();
}

<h2>@Html.ItemDisplayLink(title, contentItem)</h2>

0
投票

使用形状跟踪工具,它帮助我理解模型结构。现在我不是说这是Orchard团队想要这样做的方式,但这就是我最终解决问题的方法。

@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>
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.