是否可以将sitefinity小部件添加到我的自定义小部件中?

时间:2019-02-21 22:04:00

标签: sitefinity

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

感谢任何帮助。

1 个答案:

答案 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规则才能显示所有面板,以便用户可以将小部件拖至他们。这会使该方法更加棘手。