我正在尝试在Sitefinity 11中创建自定义窗口小部件。目标是在页面上显示选项卡,在每个可单击的选项卡下方显示内容面板。我正在使用引导程序来完成此操作,这很简单。
我希望能够在每个选项卡上添加一个Sitefinity占位符,这将允许编辑者将小部件(例如内容块)拖放到该选项卡上。但是,当我尝试执行此操作时,占位符区域似乎永远不会显示在CMS中,就像我向自定义模板中添加了占位符一样。
这可能吗?
这是一个简短的代码示例:
<div class="container mt-3">
<!-- Nav tabs -->
<ul class="nav nav-tabs">
<li id="tab1" class="nav-item">
<a class="nav-link active" data-toggle="tab" href="#panel1">@Model.Tab1Name</a>
</li>
<li id="tab2" class="nav-item">
<a class="nav-link" data-toggle="tab" href="#panel2">@Model.Tab2Name</a>
</li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<div id="panel1" class="container tab-pane active">
@Html.SfPlaceHolder("Panel1")
<p>here is text</p>
</div>
<div id="panel2" class="container tab-pane fade">
@Html.SfPlaceHolder("Panel2")
</div>
</div>
感谢任何帮助。
答案 0 :(得分:0)
您不能将SfPlaceHolder放在窗口小部件上,它必须位于布局文件(页面模板)中。
您可以做的是为小部件创建一个自定义设计器,然后在其中放置一个或多个内容块,例如您想要的每个标签都有一个。
然后在视图中,只需渲染内容。
https://www.progress.com/documentation/sitefinity-cms/create-custom-designer-views-mvc
编辑:要实现这一点,您需要:
控制器/ MyRichTextController.cs
public string RichText
{
get;
set;
}
视图/ MyRichText / DesignerView.Default.cshtml
<div class="form-group">
<sf-html-field class="kendo-content-block"
sf-images-settings="@SettingsHelpers.GetMediaSettings("Image")"
sf-videos-settings="@SettingsHelpers.GetMediaSettings("Video")"
sf-documents-settings="@SettingsHelpers.GetMediaSettings("Document")"
sf-model="properties.RichText.PropertyValue">
</sf-html-field>
</div>
视图/ MyRichText / DesignerView.Default.json
{
"priority": 1,
"components": [ "sf-html-field" ]
}
另一种选择是使用上述html结构创建一个布局小部件,这将允许用户将内容块放置在布局区域内。
您可以复制任何现有的布局小部件并对其进行处理。请注意,通过这种方法,您可能会具有一些css规则来隐藏除第一个选项卡面板外的所有css规则,因此您将需要仅针对后端使用一些其他css规则才能显示所有面板,以便用户可以将小部件拖至他们。这会使该方法更加棘手。