如何在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>
}
首先,你似乎混淆了区域和小部件。 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>
使用形状跟踪工具,它帮助我理解模型结构。现在我不是说这是Orchard团队想要这样做的方式,但这就是我最终解决问题的方法。
@if (Model.SideItems != null)
{
<div class="col-md-12"> </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>
}
}
}