Тип 'custom' в переменных конфигурации
Возможности типа 'custom'
Новый тип custom предоставляет следующие возможности:
Фильтрация данных через встроенные фильтры.
Фильтрация данных через пользовательские функции.
Создание пользовательских полей ввода.
Общая структура определения переменной типа 'custom'
Определение переменной типа custom имеет следующий формат, схожий с типом callback:
var_name=01:custom:custom_function_name(param1,…):Default value:Description
1. Фильтрация данных через встроенные фильтры
Если вы знакомы с разработкой для Cotonti, то, вероятно, вам известна функция cot_import, которая фильтрует данные, введенные пользователями, согласно заданному фильтру. Встроенные фильтры можно использовать для автоматической фильтрации значений настроек расширения на странице конфигурации.
Для этого в описании переменной в установочном файле расширения (например, имя_расширения.setup.php) нужно указать тип custom, а затем указать название фильтра для обработки данных:
alpha_only=05:custom:function_name_ALP()::Alphanumeric input
Здесь ALP — это фильтр для обработки входных данных, в данном случае — фильтрация на алфавитно-цифровые символы.
Доступные фильтры:
INT — для целых чисел.
BOL — для булевых значений.
PSW — для паролей.
ALP — для алфавитно-цифровых символов.
TXT — для текста.
NUM — для чисел.
Подробнее о фильтрах можно прочитать в документации.
Если пользователь не планирует использовать собственное поле ввода, то название функции можно опустить, оставив только сам фильтр:
alpha_only=05:custom:_ALP()::Alphanumeric input
2. Фильтрация данных через пользовательские функции
Если встроенных фильтров недостаточно, можно создать собственный фильтр. Есть два пути для этого:
2.1. Пользовательский фильтр для cot_import
Создание пользовательских фильтров описано в статье "Фильтрация и проверка введенных данных". Основной принцип: фильтр должен быть зарегистрирован в реестре фильтров:
$cot_import_filters['MYFILTER'][] = 'myfilter_function';
Сам фильтр можно вызвать, как показано ниже:
some_var=01:custom:_MYFILTER()::User data
2.2. Произвольная пользовательская функция
Этот вариант позволяет напрямую вызывать пользовательскую функцию для фильтрации данных. Имя функции должно быть сформировано особым образом — с окончанием _filter.
Например, для фильтрации ввода номера телефона:
mobile_num=01:custom:mobtel_input('+7', 10)::Contact phone
Для фильтрации будет вызвана функция mobtel_input_filter(), которая обработает данные ввода.
Функция фильтрации имеет следующий вид:
function mobtel_input_filter(&$phone, $cfg_var, $prefix='', $length=null) {
$filtered = preg_replace("/[^\d]/", '', $phone);
if ($length && strlen($filtered) != $length) {
$filtered = null;
$phone = '';
}
return $filtered;
}
Функция должна вернуть отфильтрованные данные или NULL, если фильтрация невозможна.
3. Создание пользовательских полей ввода
Тип custom также позволяет контролировать внешний вид и функциональность полей ввода. Разработчик может полностью переопределить HTML-код поля ввода или создать несколько отдельных полей для одного параметра.
Пример функции для создания поля ввода мобильного телефона:
function mobtel_input($cfg_var, $prefix='') {
$value = $cfg_var['config_value'];
$formatted = $prefix . ' (' . substr($value, 0, 3) . ') ' . substr($value, 3, 7);
return cot_inputbox('text', $cfg_var['config_name'], $formatted, array('placeholder' => $prefix . ' (000) 0000000'));
}
Здесь cot_inputbox используется для генерации HTML-кода поля ввода с заданным атрибутом.
4. Пример использования
4.1. Поле ввода пароля
Для примера, если нужно создать поле ввода пароля с подтверждением:
cloud_psw=01:custom:cfg_password(5)::Test password input
Здесь cfg_password() — функция для вывода поля пароля.
function cfg_password($cfg_var, $minlength = 4) {
$value = $cfg_var['config_value'];
$input_code =
cot_inputbox('password', $cfg_var['config_name'].'[0]', $value) .
cot_inputbox('password', $cfg_var['config_name'].'[1]', '');
return $input_code;
}
4.2. Данные по умолчанию
Если фильтр или функция вывода поля не задана, Cotonti использует значения по умолчанию. Например:
ui_color=01:custom:color_input_alp():Black:Select color, type name or HEX code
В этом случае для поля ввода будет использована функция color_input_alp(), а для обработки введенного значения применяется фильтр ALP.
Рекомендации и замечания
Гибкость и безопасность:
Применение функции фильтрации данных важно для предотвращения ввода некорректных значений. Обязательно используйте фильтры, чтобы данные, вводимые пользователем, были безопасными.
Документация:
Следите за актуальностью документации по встроенным фильтрам, так как их использование значительно упрощает задачу фильтрации.
Модульность:
Для максимальной гибкости создавайте общие функции для фильтрации и вывода полей, которые можно будет использовать в разных расширениях.