DotNetNuke Extension/Portal 设置页面
DotNetNuke Extension/Portal Settings Page
我正在使用 Christoc 模板在 Visual Studio 2012 年构建自定义 DNN 7 模块。我已经能够弄清楚如何设置模块范围的设置,以及选项卡范围的设置。但是,我想做的是在 Extension/Package 级别或至少在 Portal 级别设置一些默认设置。这样,如果用户正在添加模块实例,就会有我可以读入使用的默认值。两个问题:
1) 我当然可以编写一个名为 ExtensionSettings.ascx 的控件 (ASCX),它可能会起到作用(至少对于 Portal 范围而言),但我如何在 DNN 清单文件中指定将添加该控件到正确的设置页面(大概在 Host | Extensions | MyModule | Edit 下)?
2) 如何在安装时预填充这些设置?我是否需要添加 SQL 语句来手动添加它们,或者有办法通过清单添加设置?
- 根据我的经验,门户网站上没有控件注册
模块设置的级别。只有 Module 和 TabModule 作用域
设置,就像你说的。
- 我最喜欢的允许 'default' 的设置方式是
这个:
创建设置界面:
public interface ISettingsRepository
{
string ReplyToAddress { get; set; }
string InviteEmailSubject { get; set; }
}
然后是一个实现class(注意默认值是getter中返回的默认值)。请参阅将属性值写入模块设置的完整实现。
public class SettingsRepository : ISettingsRepository
{
/*
* See the full code at
* https://dnnsocialinvite.codeplex.com/SourceControl/latest#Components/SettingsRepository.cs
*/
...
public string ReplyToAddress
{
get { return ReadSetting<string>("ReplyToAddress", "noreply@email.com"); }
set { WriteSetting("ReplyToAddress", value.ToString()); }
}
public string InviteEmailSubject
{
get { return ReadSetting<string>("InviteEmailSubject", "You are invited to join"); }
set { WriteSetting("InviteEmailSubject", value.ToString()); }
}
}
然后您可以在模块的设置控件中使用它。请注意,我可以将设置引用为属性来设置和获取它们。如果我得到一个没有设置的,那么将返回默认值:
public override void LoadSettings()
{
SettingsRepository _settingsCtrl = SettingsRepository(this.ModuleId, this.TabModuleId);
txtEmailSubject.Text = _settingsCtrl.InviteEmailSubject;
}
public override void UpdateSettings()
{
SettingsRepository _settingsCtrl = SettingsRepository(this.ModuleId, this.TabModuleId);
_settingsCtrl.InviteEmailSubject = txtEmailSubject.Text;
}
现在,此实现具有扩展的硬编码默认值。您可以从资源 (.resx) 文件中读取默认设置字符串,并可能使用资源文件名中的门户 ID 维护每个门户的资源文件。该值可以替换设置属性 getter.
中的硬编码默认值
我正在使用 Christoc 模板在 Visual Studio 2012 年构建自定义 DNN 7 模块。我已经能够弄清楚如何设置模块范围的设置,以及选项卡范围的设置。但是,我想做的是在 Extension/Package 级别或至少在 Portal 级别设置一些默认设置。这样,如果用户正在添加模块实例,就会有我可以读入使用的默认值。两个问题:
1) 我当然可以编写一个名为 ExtensionSettings.ascx 的控件 (ASCX),它可能会起到作用(至少对于 Portal 范围而言),但我如何在 DNN 清单文件中指定将添加该控件到正确的设置页面(大概在 Host | Extensions | MyModule | Edit 下)?
2) 如何在安装时预填充这些设置?我是否需要添加 SQL 语句来手动添加它们,或者有办法通过清单添加设置?
- 根据我的经验,门户网站上没有控件注册 模块设置的级别。只有 Module 和 TabModule 作用域 设置,就像你说的。
- 我最喜欢的允许 'default' 的设置方式是 这个:
创建设置界面:
public interface ISettingsRepository
{
string ReplyToAddress { get; set; }
string InviteEmailSubject { get; set; }
}
然后是一个实现class(注意默认值是getter中返回的默认值)。请参阅将属性值写入模块设置的完整实现。
public class SettingsRepository : ISettingsRepository
{
/*
* See the full code at
* https://dnnsocialinvite.codeplex.com/SourceControl/latest#Components/SettingsRepository.cs
*/
...
public string ReplyToAddress
{
get { return ReadSetting<string>("ReplyToAddress", "noreply@email.com"); }
set { WriteSetting("ReplyToAddress", value.ToString()); }
}
public string InviteEmailSubject
{
get { return ReadSetting<string>("InviteEmailSubject", "You are invited to join"); }
set { WriteSetting("InviteEmailSubject", value.ToString()); }
}
}
然后您可以在模块的设置控件中使用它。请注意,我可以将设置引用为属性来设置和获取它们。如果我得到一个没有设置的,那么将返回默认值:
public override void LoadSettings()
{
SettingsRepository _settingsCtrl = SettingsRepository(this.ModuleId, this.TabModuleId);
txtEmailSubject.Text = _settingsCtrl.InviteEmailSubject;
}
public override void UpdateSettings()
{
SettingsRepository _settingsCtrl = SettingsRepository(this.ModuleId, this.TabModuleId);
_settingsCtrl.InviteEmailSubject = txtEmailSubject.Text;
}
现在,此实现具有扩展的硬编码默认值。您可以从资源 (.resx) 文件中读取默认设置字符串,并可能使用资源文件名中的门户 ID 维护每个门户的资源文件。该值可以替换设置属性 getter.
中的硬编码默认值