Бесплатный модуль "Настройки проекта"

   Практически любой проект требует хранения и использования внешних ассоциативных параметров, таковыми могут являться идентификаторы инфоблоков, групп пользователей и множество других по усмотрению разработчика. Появление “магических” цифр в коде является нежелательной практикой и очень затрудняет поддержку такого проекта. В большинстве случаев параметры определяются в виде констант или, что еще хуже, глобальных переменных в подключаемом файле init.php. Такое решение не является наглядным и увеличивает эффект “черного ящика”, что в свою очередь повышает зависимость заказчика от разработчика при дальнейшем развитии проекта.
   Решение “Настройки проекта”  позволяет устанавливать  различные параметры через привычный web-интерфейс и легко получать их значения через api использования модуля, что является несомненным плюсом удобства использования и “прозрачности” проекта.
[spoiler]
   Разработчиком определяется список используемых полей и их значений. Для удобного использования и редактирования значений поля необходимо установить ряд атрибутов для него. Таковыми являются:
  • имя - название в общем списке настроек
  • символьный код - строка идентифицирующие поле, используется в коде при получении значения
  • сортировка - порядок отображения в общем списке
  • признак (флаг) множественности - указывает что значением поля будет являться список (массив) или скалярное величина
  • тип - принадлежность поля к определенной формализации
  • значение по умолчанию - хранимое значение поля, является больше подсказкой при редактировании действующего значения
для поля типа “список” необходимо определить множество вариантов, которые определяются при настройке атрибутов.

Настройка метаданных поля:

nastroyka_polya.jpg

nastroyka_spiska.jpg
На данный момент поддерживаются следующие типы полей:
  • число
  • строка
  • флаг (да/нет)
  • список
  • инфоблок - вариантами значений становится список активных информационных блоков
  • группа пользователей
  • пользователь
  • пользовательский (“кастомный”)
Использование.
   После установки модуля появится страница административной части по адресу “Настройки” - “Настройки проекта” (в самом низу меню). Где необходимо определить список полей и их значений.
   Получение значения поля определяется следующим методом:
WS_PSettings::getFieldValue($name, $default = null);
где $name - символьный код поля определенный в настроках, $defult - значение которое вернет метод, если поля с таким кодом не существует.

Пример:
<?php

/* == == = == = == = = = */

// Подключение модуля (один раз)
CModule::includeModule(‘ws.projectsettings’);
// Получение списка инфоблоков товаров интернет-магазина
$iblockProducts = WS_PSettings::getFieldValue(‘iblockProducts’, array());
// Получение идентифиатора группы менеджеров
$managersGroup = WS_PSettings::getFieldValue(‘managerGroup’);

/* == == = == = == = = = */

   В процессе разработки могут понадобиться использование “списочных” типов непредусмотренных при разработке модуля (все требуемые варианты предусмотреть невозможно и в свою очередь накладно как по времени разработки так и по количеству обращений к базе данных). Установка при этом списочных значений вручную  теряет свою актуальность, так же необходимо для нескольких полей с одинаковыми вариантами применять одинаковые настройки списка фактически их копируя.  Для этого случая предусмотрено событие “'OnBuildTypes'”, в обработчиках которого можно добавлять собственные вычисляемые варианты списочных полей. Результатом выполнения обработчика должен являться ассоциативный массив следующей структуры:
<?php
array(
   //Название типа, будет отображено в списке выбора типов
   ‘name’ => ‘Список валют’,
 //Варианты значений списка, где ключами являются сами значения выбора, а 
      //значениями массива - названия отображаемые в списке вобра при вводе значения
   ‘variants’ => array(
         ‘RUB’ => ‘Рубль’,
      ‘USD’ => ‘Доллар’,
      ‘EUR’ => ‘Евро’
   )
);
Пример использования:
   Обработчик должен быть подключен до исполнения контентной части административной страницы, желательно определить его в файле init.php.
Определение обработчика (init.php):

<?php
/** =================== Добавление обработчика присоединения типа ==================== **/
function addSettingsCustomCurrencyType() {
    $rsCur = CCurrency::GetList(
     $by = 'name', 
     $order = 'asc'
    );
    $variants = array();
    while($aCurrency = $rsCur->fetch()) {
        $variants[$aCurrency['CURRENCY']] = $aCurrency['FULL_NAME'];
    }

    return array(
     'name' => 'Список валют',
     'variants' => $variants
    );
}
AddEventHandler('ws.projectsettings', 'OnBuildTypes', 'addSettingsCustomCurrencyType');
/** ========================================================== **/
 

Теперь при редактировании настроек появится определенный пользовательский тип.

nastroki_proekta._kastomnoe_pole.jpg
Где определены “кастомные” варианты выбора.

nastroki_proekta._varianty_kastomnogo_tipa.jpg

Получение значения в коде для такого поля не чем не отличается от остальных (по символьному коду).

   На данный момент существует два вида прав доступа к настройкам, это запрет и полный доступ. В дальнейшем планируется дополнительное разграничение прав, такие как изменение (редактирование значений полей без доступа к настройкам) и чтение (без возможности изменений).