Здравствуйте.
На сайте, у пользователей заведено пользовательское свойство типа "список" с кодом UF_LIST. Поле множественное, внешний вид "флажки". Заведено два значения свойства, скажем, "значение 1" (ID=3), "значение 2" (ID=4).
Регистрация пользователей происходит через стандартный компонент system.auth.registration. Шаблон этого компонента кастомизирован, причем поле для свойства UF_LIST как таковое не выводится. Вместо него выводится скрытое поле (назовем его UF_LIST_FIELD), значение которого формирует js, в зависимости от действий пользователя. Если значение свойства одно - в поле UF_LIST_FIELD ставится id этого свойства (в нашем случае 3 или 4), если нужно выбрать сразу два значения свойства, то ид свойств разделяются через запятую (то есть 3,4).
Для записи значения этого свойства создан обработчик события OnBeforeUserAdd. В обработчике этого события скрипт получает $_POST['UF_LIST_FIELD'], explode'ом режет значение этого поля по символу ",", получает массив и приравнивает его для свойства UF_LIST. То есть:
Проблема в том, что значение свойства не сохраняется. Проверяю массив $arFields на выходе обработчика - поле UF_LIST присутствует и значение его корректно (массив идешников значений свойства), но оно не сохраняется для свойства. Что не так?
На сайте, у пользователей заведено пользовательское свойство типа "список" с кодом UF_LIST. Поле множественное, внешний вид "флажки". Заведено два значения свойства, скажем, "значение 1" (ID=3), "значение 2" (ID=4).
Регистрация пользователей происходит через стандартный компонент system.auth.registration. Шаблон этого компонента кастомизирован, причем поле для свойства UF_LIST как таковое не выводится. Вместо него выводится скрытое поле (назовем его UF_LIST_FIELD), значение которого формирует js, в зависимости от действий пользователя. Если значение свойства одно - в поле UF_LIST_FIELD ставится id этого свойства (в нашем случае 3 или 4), если нужно выбрать сразу два значения свойства, то ид свойств разделяются через запятую (то есть 3,4).
Для записи значения этого свойства создан обработчик события OnBeforeUserAdd. В обработчике этого события скрипт получает $_POST['UF_LIST_FIELD'], explode'ом режет значение этого поля по символу ",", получает массив и приравнивает его для свойства UF_LIST. То есть:
Код |
---|
AddEventHandler("main", "OnBeforeUserAdd", "OnBeforeUserAddHandler"); function OnBeforeUserAddHandler(&$arFields){ ... $val = explode(",", $_POST["UF_LIST_FIELD"]); $arFields["UF_LIST"] = $val; ... } |