Как создать модуль DNN, который может быть размещен на одной странице несколько раз с различным содержанием в настройках? - PullRequest
0 голосов
/ 12 февраля 2019

Я создаю модуль, который позволит мне сохранять HTML-контент в разделе настроек модуля DNN, который будет храниться в настройках портала.

Как убедиться, что мои настройки уникальны только длятекущий контейнер на котором он находится?Как я могу получить идентификатор текущего div, на котором установлен модуль?

Тогда я смогу разместить модуль точно в том же месте.Например, раздел «Верхний и нижний колонтитулы» веб-сайта.

Итак, если я могу получить ParentDivID, а затем добавить его в конце ключа настроек.

Например: if (dictSettings.ContainsKey("GlobalHTML" + ParentDivID ))

Это мой текущий код для модуля DNN Настройки Код позади

if (Page.IsPostBack == false)
{
    //Updated to use Portal Settings instead of per page per tab settings
    var dictSettings = m_PortalController.GetPortalSettings(PortalId);

    if (dictSettings.ContainsKey("GlobalHTML"))
    {
     txtGlobalHTML.Text = dictSettings["GlobalHTML"];
    }

}

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

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

Поэтому, если мне нужен один и тот же номер телефона на нескольких страницах или в содержимом нижнего колонтитула, я могу оставить поле HTML в разделе настроек пустым и просто сделать идентификатор идентичным тому, который я изначально настроил для содержимого HTML.

Это код для загрузки настроек модуля:

 if (Page.IsPostBack == false)
 {
  per tab settings
  var dictSettings = m_PortalController.GetPortalSettings(PortalId);

  if (Settings.Contains("GlobalIDHTML"))
  {
  txtIDGlobalHTML.Text = Settings["GlobalIDHTML"].ToString();
  LinkID = Settings["GlobalIDHTML"].ToString();
  }

  if (dictSettings.ContainsKey("GlobalHTML"+ LinkID))
  {
  txtGlobalHTML.Text = dictSettings["GlobalHTML"+ LinkID];                       
  }      
}

Это код для обновления настроек:

 public override void UpdateSettings()
 {
  try
     {
      var modules = new ModuleController();
      modules.UpdateModuleSetting(ModuleId, "GlobalIDHTML", txtIDGlobalHTML.Text);
      modules.UpdateTabModuleSetting(TabModuleId, "GlobalIDHTML", txtIDGlobalHTML.Text);
      var globalstoragevalue = "GlobalHTML"+ txtIDGlobalHTML.Text;

      if (txtGlobalHTML.Text != null && !string.IsNullOrWhiteSpace(txtGlobalHTML.Text))
      {
      PortalController.UpdatePortalSetting(PortalId, globalstoragevalue, txtGlobalHTML.Text);
      }
    }
    catch (Exception exc) //Module failed to load
    {
     Exceptions.ProcessModuleLoadException(this, exc);
    }
  }

Мой код при загрузке страницы:

  try
  {
     if (Settings["GlobalIDHTML"] != null && !string.IsNullOrWhiteSpace(Settings["GlobalIDHTML"].ToString()))
    {
    GlobalLinkID = Settings["GlobalIDHTML"].ToString();
    }
    GlobalContent = TryGetPortalSetting("GlobalHTML"+ GlobalLinkID);

    if (GlobalContent != null)
   {
    GlobalPageContent = GlobalContent;
   }                  
  }

Настройки модуля:

enter image description here

Результат:

enter image description here

0 голосов
/ 14 февраля 2019

Я бы посмотрел, как модуль HTML делает это ...

0 голосов
/ 12 февраля 2019

Обычно настройки магазина хранятся в таблице ModuleSettings ModuleController.

var modules = new ModuleController();
modules.UpdateTabModuleSetting(TabModuleId, "SettingKey", "SettingValue");

Но для HTML я бы создал пользовательскую таблицу, в которой хранится HTML с первичным ключом и столбцом TabModuleId.

...