Оказалось, как всегда все просто. Реализовал (наверняка коряво, но работает) следующим образом(привожу упрощенный пример, где проверяется только уникальность email):
Функция logincheck() в modules/users/__custom.php
public function logincheck(){
$object_id = $this->user_id;
$email = trim((string) getRequest('email'));
if (!$this->checkIsUniqueEmail($email, $object_id)) {
echo ("<span style='color:red'>ОШИБКА: пользователь с данным email уже существует</span>");
}
else {
// ниже, переделанная функция register_do (можно взять ее в исходном виде):
if (!($template = getRequest('template'))) {
// ..........................................
$this->setEventPoint($oEventPoint);
}
exit();
}
Не забываем дать права новой функции:
Создаем файл в classes/modules/users: permissions.custom.php
<?php
$permissions = Array(
'login' => Array('logincheck')
);
?>
Дальше создаем страницу с формой и скриптом, который будет обращаться к макросу и выдавать ответ (либо ошибку, либо запуск регистрации):
$(document).ready(function() {
$("#IDФОРМЫ").submit(function(){
var form = $(this);
var data = form.serialize();
$.ajax({
type: "POST",
url: "/udata/users/logincheck",
dataType: "text",
data: data,
success: function(data){
document.getElementById('ID_DIV_куда_выводим_сообщение').innerHTML = data;
if (document.getElementById('ID_DIV_куда_выводим_сообщение').innerHTML == "") {
document.getElementById('ID_DIV_куда_выводим_сообщение').innerHTML = 'Пользователь успешно зарегистрирован!';
}
}
});
return false;
});
});