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 语句来手动添加它们,或者有办法通过清单添加设置?

  1. 根据我的经验,门户网站上没有控件注册 模块设置的级别。只有 Module 和 TabModule 作用域 设置,就像你说的。
  2. 我最喜欢的允许 '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.

中的硬编码默认值