Как я могу обнаружить и отобразить для редакторов, когда элемент является общим? - PullRequest
0 голосов
/ 08 января 2020

У нас большой сайт, и есть несколько случаев, когда один базовый c элемент контента используется совместно и повторно используется на 5-12 страницах. На сайте более 10 редакторов, и по крайней мере половина из них нечаста, поэтому повторение проблемы с этими объектами невозможно. Они постоянно меняют содержимое на одной странице, добавляя особенности, которые затем выглядят странно, неработоспособно или совершенно неуместно на одной или нескольких других страницах.

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

if(Content.IsSharedItem) {
  // add a nice blue, round 2sxc style button with a 
  <i class="fas fa-share-alt"></i>
}

Я изучил API, но помимо написания некоторого LINQ (который может потребовать много ресурсов процессора), я не нашел никакого способа реализовать что-либо подобное .IsSharedItem

Есть идеи или предложения? Есть ли что-то встроенное, что я мог бы не знать или не называть так, чтобы не искать? Любая помощь будет принята с благодарностью. Заранее благодарим.

DNN 9.03.02, 2sx c 10.9.1, приложение Content 3.03

Ответы [ 2 ]

1 голос
/ 19 января 2020

Я не мог понять, как перейти от .Parents () к TabID, поэтому я понял, что мы выполняем в модуле, поэтому простое выполнение Dnn.Module.ModuleSettings["ToSIC_SexyContent_ContentGroupGuid"] дает вам то, что вам нужно. Тогда DNN не имеет API-метода для обращения к ModuleSetting.SettingValue, например, нет вещи типа GetModulesByModuleSettingValue (). Итак, SQL начал обретать смысл, и я сделал это вместо этого ...

Мне было бы очень интересно, если у кого-нибудь есть способы улучшить это. Лучше запрос? Способ сделать это без SQL? Рефакторинг или упрощение некоторых вещей? Например, добавление TabName было запоздалой мыслью и, вероятно, должно было быть сделано в SQL.

. Добавьте это к любому представлению элемента содержимого, оберните его в if (Edit.Enabled) или что-то подобное, только редакторы / администраторы видят его.

@if(Edit.Enabled) {
  @RenderPage("_Shared__ContentGroup-Info.cshtml")
}

Сохраните это в имя файла _Shared__ContentGroup-Tabs.cshtml (выше)

<code>@using System.Data
@using DotNetNuke.Data
@using DotNetNuke.Entities.Tabs

@*
    This sub template is intended to
    a) reveal whether or not the Content item is shared and
    b) show links to those pages

    Reminder the .Parents("2SexyContent-ContentGroup")..EntityGuid is what is stored in
    Dnn.Module.ModuleSettings["ToSIC_SexyContent_ContentGroupGuid"]
*@

@{
  string sql = @"
      SELECT DISTINCT TabID
      FROM TabModules
        INNER JOIN ModuleSettings ON TabModules.ModuleID = ModuleSettings.ModuleID
      WHERE ModuleSettings.SettingValue = '{0}'";
  sql = string.Format(sql, Dnn.Module.ModuleSettings["ToSIC_SexyContent_ContentGroupGuid"]);
  IList<int> tabs;
  using (IDataContext db = DataContext.Instance()) {
      tabs = db.ExecuteQuery<int>(CommandType.Text, sql).ToList();
  }
}
<pre>
This Content item is shared to @(tabs.Count - 1) other page(s)
@foreach(int tabId in tabs
  .Where(t => t != Dnn.Tab.TabID)
) {
<a href="/tabid/@tabId)">@TabController.Instance.GetTab(tabId, Dnn.Portal.PortalId).TabName</a>
}

Пример вывода: screenclip, example output

Итак, , так как у нас уже есть Bootstrap 4 и Fancybox на страницах, я смог превратить эксперимент в работающий пользовательский интерфейс с еще примерно 5 минутами игры. :

simple UI implementation demo

1 голос
/ 14 января 2020

Там на самом деле есть :). Предположим, что общий доступ означает «он был назначен модулю вручную». В этом случае есть другая сущность, которая ссылается на интересующую вас.

В основном, если вы запрашиваете какой-либо элемент для .Parents («2SexyContent-ContentGroup»), вы должны получить все Content-Groups, ссылающиеся на него.

Просто помните, что некоторые могут быть удалены и т.д. c. так что это не на 100% надежно или потребуется больше работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...