是否可以将SiteFinity小部件添加到自定义小部件?

时间 2019-02-22
阅读 151
点赞 0
收藏 0
连接kmprenger

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

感谢任何帮助。

建议答案

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

👍 0