Бесплатный модуль "Настройки проекта"
26 октября 2012
Автор: Соколовский Максим
Практически любой проект требует хранения и использования внешних ассоциативных параметров, таковыми могут являться идентификаторы инфоблоков, групп пользователей и множество других по усмотрению разработчика. Появление “магических” цифр в коде является нежелательной практикой и очень затрудняет поддержку такого проекта. В большинстве случаев параметры определяются в виде констант или, что еще хуже, глобальных переменных в подключаемом файле init.php. Такое решение не является наглядным и увеличивает эффект “черного ящика”, что в свою очередь повышает зависимость заказчика от разработчика при дальнейшем развитии проекта.
Решение “Настройки проекта” позволяет устанавливать различные параметры через привычный web-интерфейс и легко получать их значения через api использования модуля, что является несомненным плюсом удобства использования и “прозрачности” проекта.
Разработчиком определяется список используемых полей и их значений. Для удобного использования и редактирования значений поля необходимо установить ряд атрибутов для него. Таковыми являются:
- имя - название в общем списке настроек
- символьный код - строка идентифицирующие поле, используется в коде при получении значения
- сортировка - порядок отображения в общем списке
- признак (флаг) множественности - указывает что значением поля будет являться список (массив) или скалярное величина
- тип - принадлежность поля к определенной формализации
- значение по умолчанию - хранимое значение поля, является больше подсказкой при редактировании действующего значения
Настройка метаданных поля:
На данный момент поддерживаются следующие типы полей:
- число
- строка
- флаг (да/нет)
- список
- инфоблок - вариантами значений становится список активных информационных блоков
- группа пользователей
- пользователь
- пользовательский (“кастомный”)
После установки модуля появится страница административной части по адресу “Настройки” - “Настройки проекта” (в самом низу меню). Где необходимо определить список полей и их значений.
Получение значения поля определяется следующим методом: 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'); /** ========================================================== **/
Теперь при редактировании настроек появится определенный пользовательский тип.
Где определены “кастомные” варианты выбора.
Получение значения в коде для такого поля не чем не отличается от остальных (по символьному коду).
На данный момент существует два вида прав доступа к настройкам, это запрет и полный доступ. В дальнейшем планируется дополнительное разграничение прав, такие как изменение (редактирование значений полей без доступа к настройкам) и чтение (без возможности изменений).
Статья полезна для
Предлагаем еще прочесть