Можно ли добавить виджет sitefinity в мой пользовательский виджет? - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь создать пользовательский виджет в 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 голосов
/ 22 февраля 2019

Вы не можете поместить SfPlaceHolder в виджет, он должен быть в вашем файле макета (шаблон страницы).

Что вы можете сделать, это создать собственный конструктор для вашего виджета и поместить в него один или несколько блоков контента, например по одному для каждой вкладки, которую вы хотите иметь.

Затем в представлении,Вы просто делаете контент.

https://www.progress.com/documentation/sitefinity-cms/create-custom-designer-views-mvc

РЕДАКТИРОВАТЬ: Для достижения этого вам необходимо:

Контроллеры / MyRichTextController.cs

    public string RichText
    {
        get;
        set;
    }

Views / 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>

Views / MyRichText / DesignerView.Default.json

{
  "priority": 1,
  "components": [ "sf-html-field" ]
}

Другая альтернатива можетсоздать виджет Layout с вышеупомянутой html-структурой, который позволит пользователю размещать блоки содержимого внутри областей макета.

Вы можете просто скопировать любой из существующих виджетов макета и работать над этим.Обратите внимание, что при таком подходе у вас, вероятно, будут некоторые правила CSS, которые скрывают все, кроме первой панели вкладок, поэтому вам нужно будет иметь некоторые дополнительные правила CSS только для бэкэнда, чтобы показать все панели, чтобы пользователи могли перетаскивать виджеты вих.Это сделало бы этот подход немного более хитрым.

...