@photosho

Как организовать отправку цели Я.Метрики при регистрации пользователя?

Нужно отправить цель Яндекс.Метрики (reachGoal()) в момент регистрации пользователя. Как это лучше всего сделать, не меняя файлы ядра? Назначить событие onclick на кнопку "Зарегистрироваться" - не подойдет, потому что форма может и не отправиться - цель должна вызываться только при отправке формы.
  • Вопрос задан
  • 191 просмотр
Решения вопроса 1
@photosho Автор вопроса
Решил задачу при помощи блокировки отправки формы кнопкой "submit" и отправки ее самостоятельно посредством ajax-запроса. Хотя, вариант из комментариев к вопросу кажется более жизнеспособным, если нужны именно "реальные" пользователи, подтверждающие свою учетную запись, а не отслеживание самого процесса регистрации. Зависит от задачи и того, что хотят от вас специалисты по рекламе.

Опишу здесь свой вариант решения.

1. "/template_name/components/bitrix/system.auth.registration/template_name/template.php"

Здесь поставил на "submit button" событие onclick:

onclick = "registerSubmit(event);"

2. В основном файле скрипта (или в любом другом, загружающемся на странице):

function registerSubmit(event) {
	event.preventDefault();

	var form = jQuery(event.target).closest('.registration-form');

	if (form.length) {
		form.find('[name="USER_EMAIL"]').val(form.find('[name="USER_LOGIN"]').val());

		BX.ajax.post(
			form.attr('data-ajax'),
			form.serialize(),
			function(result) {
				var parent;

				result = jQuery(result);

				if (result.attr('id') == 'bx_incl_area_1') {
					yaCounter52684615.reachGoal('LK');
					location.href = '';
				}
				else {
					/*
						Обработка действий в случае неудачной попытки регистрации,
						в этом случае в result приходит разметка формы с текстом ошибок.
					*/
				}
			}
		);
	}

	return false;
}


То же - и для авторизации, за исключением, что путь к шаблону компонента другой и некоторые изменения в самой функции. Некоторые действия, возможно, специфичны для конкретно моего решения и установленного шаблона - не знаю, какие изменения в шаблоны были внесены до меня. Эта строка:

form.find('[name="USER_EMAIL"]').val(form.find('[name="USER_LOGIN"]').val());


Заполняет невидимый input "USER_EMAIL" данными из input'а "USER_LOGIN" (туда пользователь, как ни странно, вводит свой email-адрес). Она может быть не нужна в стандартном (или любом другом) шаблоне.

Но суть остается прежней: получаем форму-родителя кнопки "submit", на которую нажали, смотрим, чтобы все необходимые для регистрации поля были заполнены, сериализуем форму и посылаем post-запросом на требуемый адрес (у меня этот адрес был записан в "data-ajax"). Если все прошло успешно - перезагружаем страницу, а если нет - выполняем другие действия. Например, заменяем содержимое родителя формы тем, что пришло от сервера. Код в этой секции намеренно удалил, потому что он-то уж точно был специфичным.

Для определения, прошло ли все успешно, смотрим, что возвращает сервер в обоих случаях, ищем различия между двумя результатами и так проверяем. У меня при успешной регистрации сервер возвращает пустой "div" с "id = bx_incl_area_1".
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы