Я не мог понять, как перейти от .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>
}
Пример вывода:
Итак, , так как у нас уже есть Bootstrap 4 и Fancybox на страницах, я смог превратить эксперимент в работающий пользовательский интерфейс с еще примерно 5 минутами игры. :