Страница настроек расширения/портала DotNetNuke

Я использую шаблоны Christoc для создания собственного модуля DNN 7 в Visual Studio 2012. Мне удалось выяснить, как установить параметры области модуля, а также настройки области вкладок. Однако я хотел бы установить некоторые настройки по умолчанию на уровне расширения/пакета или, по крайней мере, на уровне портала. Таким образом, если пользователь добавляет экземпляр модуля, будут значения по умолчанию, которые я могу прочитать и использовать. Два вопроса:

1) Я, безусловно, могу написать элемент управления (ASCX) с именем ExtensionSettings.ascx, который, вероятно, поможет (по крайней мере, для области портала), но как мне указать в файле манифеста DNN, что он будет добавлен на соответствующую страницу настроек (предположительно в Host | Extensions | MyModule | Edit)?

2) Как я могу предварительно заполнить эти настройки при установке? Нужно ли мне добавлять оператор SQL, чтобы добавить их вручную, или есть способ добавить настройки через манифест?


person David P    schedule 31.08.2015    source источник


Ответы (1)


  1. По моему опыту, нет контрольной регистрации на уровне портала для настроек модуля. Как вы сказали, только настройки модуля и TabModule.
  2. Мой любимый способ настройки, который допускает «по умолчанию», заключается в следующем:

Создадим интерфейс настроек:

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

А затем класс реализации (обратите внимание, что значение по умолчанию — это значение по умолчанию, возвращаемое в геттере). См. полную реализацию, в которой значение атрибута записывается как параметр модуля.

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) и, возможно, сохранить файл ресурсов для каждого портала, используя идентификатор портала в имени файла ресурсов. Это значение может заменить жестко заданное значение по умолчанию в методе получения атрибута настройки.

person DotNetNuclear    schedule 01.09.2015