如何创建一个 DNN 模块,它可以多次放置在同一页面上,但设置中的内容不同?
How do I create a DNN module which can be placed on the same page multiple times with different content in the settings?
我正在创建一个模块,它将允许我在 DNN 模块的设置部分保存 HTML 内容,这些内容将存储在门户设置中。
如何确保我的设置仅对放置它的当前容器是唯一的?如何获取模块所在的当前 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"];
}
}
您通常将商店模块设置存储在 ModuleController
的 ModuleSettings table 中。
var modules = new ModuleController();
modules.UpdateTabModuleSetting(TabModuleId, "SettingKey", "SettingValue");
但对于 HTML,我会创建一个自定义 table 来存储带有主键和 TabModuleId
列的 HTML。
我想出了一种方法,可以将相同的模块添加到特定门户网站的页面,并将已保存在设置中的内容与我可以设置的 ID 链接起来。
所以如果我想在多个页面或页脚内容上使用相同的电话号码,那么我可以将设置部分的 HTML 字段留空,只需将 ID 设置为与我最初配置的 ID 相同即可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;
}
}
模块设置:
结果:
我会看看 HTML 模块是如何做到这一点的...
我正在创建一个模块,它将允许我在 DNN 模块的设置部分保存 HTML 内容,这些内容将存储在门户设置中。
如何确保我的设置仅对放置它的当前容器是唯一的?如何获取模块所在的当前 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"];
}
}
您通常将商店模块设置存储在 ModuleController
的 ModuleSettings table 中。
var modules = new ModuleController();
modules.UpdateTabModuleSetting(TabModuleId, "SettingKey", "SettingValue");
但对于 HTML,我会创建一个自定义 table 来存储带有主键和 TabModuleId
列的 HTML。
我想出了一种方法,可以将相同的模块添加到特定门户网站的页面,并将已保存在设置中的内容与我可以设置的 ID 链接起来。
所以如果我想在多个页面或页脚内容上使用相同的电话号码,那么我可以将设置部分的 HTML 字段留空,只需将 ID 设置为与我最初配置的 ID 相同即可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;
}
}
模块设置:
结果:
我会看看 HTML 模块是如何做到这一点的...