如何创建可以多次放置在同一页面上且设置内容不同的DNN模块?

时间:2019-02-12 10:46:55

标签: dotnetnuke dnn9

我正在创建一个模块,该模块将允许我将HTML内容保存在DNN模块的设置部分中,该部分将存储在门户网站设置中。

如何确保我的设置仅对放置它的当前容器是唯一的?如何获取模块所在的当前div的ID?

然后,我可以将模块放置在完全相同的位置。例如,网站的“页眉和页脚”部分。

因此,如果我可以获取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 :(得分:2)

通常,您将存储模块设置存储在ModuleController的ModuleSettings表中。

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

但是对于HTML,我将创建一个自定义表,该表存储具有主键和TabModuleId列的HTML。

答案 1 :(得分:1)

我想出了一种方法,可以将同一模块添加到特定门户网站的页面上,并使已经保存在设置中的内容与我可以设置的ID链接。

因此,如果我想在多个页面或页脚内容上使用相同的电话号码,则可以将设置部分的HTML字段留空,而只需将ID设置为与最初为HTML内容配置的ID相同。

这是加载模块设置时的代码:

 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

答案 2 :(得分:0)

我将看看HTML模块是如何做到的...