2015-08-31 57 views
0

我使用Christoc模板爲了在Visual Studio 2012中構建自定義DNN 7模塊。我已經能夠弄清楚如何設置模塊範圍設置和選項卡範圍。但是,我想要做的是在Extension/Package級別或至少在Portal級別設置一些默認設置。這樣,如果用戶添加一個模塊實例,將會有默認值,我可以讀取使用。兩個問題:DotNetNuke擴展/門戶設置頁面

1)我當然可以編寫一個名爲ExtensionSettings.ascx的控件(ASCX),它可能會做到這一點(至少對於Portal作用域),但是我將如何在DNN清單文件中指定這將被添加到正確的設置頁面(推測在Host | Extensions | MyModule | Edit下)?

2)如何在安裝時預填充這些設置?我是否需要添加一條SQL語句來手動添加它們或者是否有通過清單添加設置的方法?

回答

0
  1. 根據我的經驗,在模塊設置的門戶 級別沒有控制註冊。只有模塊和TabModule的作用域爲 設置,就像你說的。
  2. 我做的設置,允許一個「默認」的喜歡的方式是 這樣的:

創建一個設置界面:

public interface ISettingsRepository 
{ 
    string ReplyToAddress { get; set; } 
    string InviteEmailSubject { get; set; } 
} 

然後一個實現類(請注意,默認值是默認在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", "[email protected]"); } 
     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)文件中讀取默認設置字符串,也可以使用資源文件名中的門戶標識維護每個門戶的資源文件。該值可以取代設置屬性的getter中硬編碼的默認值。