Работа с модулем SIMAI: Универсальные свойства
Папка типов свойств определяется при установке модуля. Если пользователь выбрает не устанавливать отделдьную папку, то все типы берутся из /bitrix/modules/simai.property/property. Иначе папку задает сам пользователь. Следует учитывать, что при деинсталляции модуля папка типов свойств НЕ удаляется (в целях безопасности).
Для каждого типа свойства есть своя папка в папке типов свойств.Папка типа свойства должны иметь имя, состоящее из англ. букв, цифр и знака подчеркивания. Например, "string_2" - корректное имя типа, "строка-2" - некорректное. Вывод свойства некорректного типа с помощью функционала модуля невозможен.
В папке типа свойства должен быть файл .description.php, содержащий массив вида:
$arDescription = array( "NAME" => GetMessage("SF_PROPERTY_TYPE_NAME"), "SORT" => 200, );
В этом массиве содержится наименование типа (обычно языкозависимое) и показатель сортировки среди типов.
Кроме этого, там должны быть:
- языковая подпапка lang (опционально);
- подпапка templates - шаблоны свойства (обязательно);
- файлы edit.php, filter.php, view.php, содержащие доп. функционал для редактирования, фильтра, просмотра свойства соответственно (наличие этих файлов опционально, т.к. в общем случае они не требуются - обычно достаточно функционала вызова + шаблон).
В шаблонах могут быть свои языковые папки lang, файлы из которых подключаются автоматически (вызывать языковой файл из шаблона не надо).
Для использования функционала модуля на странице в адм. панели или публичной части он должен быть подключен: \Bitrix\Main\Loader::includeSharewareModule('simai.property');
Вызовы методов модуля выглядят таким образом:
Вывод значений
\SIMAI\Property::view( $type, // тип свойства (например, "string") $template, // шаблон (в случае false или пустой строки - шаблон .default) $values, // текущие значения свойства (одномерный массив или одиночное значение) $params, // массив параметров
$safe // приведение значений и параметров к html-безопасному виду (можно не указывать, по умолчанию - true) );
Редактирование значений
\SIMAI\Property::edit( $type, // тип свойства (например, "string") $template, // шаблон (в случае false или пустой строки - шаблон .default) $values, // текущие значения свойства (одномерный массив или одиночное значение) $params, // массив параметров $safe // приведение значений и параметров к html-безопасному виду (можно не указывать, по умолчанию - true) );
При вызове этого метода подключается яваскрипт, установленный модулем /bitrix/js/simai.property.js, что дает возможность, например, использовать кнопку "Добавить" для множ. свойств в шаблонах.
Фильтр по значениям
\SIMAI\Property::filter( $type, // тип свойства (например, "string") $template, // шаблон (в случае false или пустой строки - шаблон .default) $values, // текущие значения свойства для фильтра (одномерный массив или одиночное значение) $params, // массив параметров
$safe // приведение значений и параметров к html-безопасному виду (можно не указывать, по умолчанию - true) );
Список типов свойств
$types_array = \SIMAI\Property::types_list();
Возвращает массив вида:
array( array( 'id' => {тип свойства (например, "string")}, 'name' => {языковое наименование свойства (например, "Строка")}, 'sort' => {показатель сортировки (если не указан, принимается за 500)} ), ..... }
Массив будет отсортирован в соответствии с показателями сортировки типов.
Параметр $safe=true
(по умолчанию) у вызовов edit, view, filter означает, что:
- к ключам и значениям массива $values будет применена функция htmlspecialcharsex, если $values - одиночная строка, то к ней также будет применена функция htmlspecialcharsex;
- к значениям (но не ключам!) массива $params будет рекурсивно применена функция htmlspecialcharsex.
Важно помнить про то, что ключи массива $params
(в т.ч. его подмассивов) остаются html-небезопасными, поэтому к ним надо применять htmlspecialcharsex в шаблоне. Например, это имеет значение для типа list:
<select name="<?=$params["field_name"]?>[]" size="<?=$rows?>" multiple style="max-width:300px;"> <?foreach($params["variants"] as $v_key => $v_val): $sel = in_array($v_key, $values);?> <option value="<?=htmlspecialcharsex($v_key)?>"<?=($sel? " selected" : "")?>><?=$v_val?></option> <?endforeach?> </select>
Здесь видно, что в шаблоне .default для фильтра для подмассива $params["variants"]
, задающему варианты списка, применяется htmlspecialcharsex в шаблоне.
В случае, если вызов методов делается с $safe=false
, все значения и ключи $values и $params должны обязательно приводиться к html-безопасному виду в шаблоне перед их выводом.
Нужно также помнить, что с передаваемыми пользователем значениями simai.property не производит никаких модификаций, поэтому безопасность, например, записи в базу данных значений, полученных из полей edit - задача самого разработчика.
Модуль устанавливает тестовую страницу /bitrix/modules/simai.property/admin/sf_property_test.php, где показаны типовые вызовы методов view, edit, filter для разных типов свойств. На этой странице можно увидеть типовые параметры вызовов.
Пример (вызов edit для строкового типа с указанием множественности):
$values = array('a', 'bb', 'ccc'); // существующие значения if ($bVarsFromForm) // если отправлена форма (нужно, например, при сохранении с ошибкой, когда выводятся только что отправленные значения для повторной отправки) { $values = $request->getPost('prop_2_value'); // то взять из массива $_POST (в стиле D7) } \SIMAI\Property::edit( 'string', // строка '', // шаблон .default $values, // значения array( 'field_name' => 'prop_2_value', // имя поля 'multiple' => 'Y', // множественное поле 'cols' => 30, // длина полей ввода 'bVarsFromForm' => $bVarsFromForm, // передаем параметр "брать из отправленной формы" ) // параметры );
В примере выше параметр $safe не указан и, соответственно, равен true.