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

Is it possible to add sitefinity widget to my custom widget?

我正在尝试在 Sitefinity 11 中创建一个自定义小部件。目标是在页面上显示选项卡,每个可点击选项卡下方都有内容面板。我正在使用 bootstrap 来完成这个,这很简单。

我希望能够为每个选项卡添加一个 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>

感谢任何帮助。

您不能将 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 规则以显示所有面板,以便用户可以将小部件拖到它们上面。这将使这种方法更加棘手。