Как мне создать модуль DNN, который можно разместить на одной и той же странице несколько раз с разным содержимым в настройках?

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

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

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

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

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

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

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"];
    }

}

person Tig7r    schedule 12.02.2019    source источник
comment
Я считаю, что каждый экземпляр модуля имеет уникальный идентификатор. Это было бы первое, что я бы искал. Еще одна вещь, которую вы можете сделать, это выбрать радио для заголовка, нижнего колонтитула и т. д., а затем установить настройки на основе этого.   -  person Mickers    schedule 12.02.2019


Ответы (3)


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

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

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

person VDWWD    schedule 12.02.2019
comment
Это не учитывает несколько порталов. Также вопрос заключался в том, как отличить два одинаковых модуля на одной странице. - person Mickers; 12.02.2019
comment
Это не обязательно. ModuleID всегда уникален, даже для разных порталов. - person VDWWD; 12.02.2019
comment
Хорошо. Прошло некоторое время с тех пор, как я работал с DNN, и я только что вспомнил, что сталкивался с проблемами настроек на разных порталах. - person Mickers; 12.02.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;
   }                  
  }

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

введите здесь описание изображения

Результат:

введите здесь описание изображения

person Tig7r    schedule 13.02.2019

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

person Joe Craig    schedule 13.02.2019