Страница благодарности за регистрацию
Уважаемые знатоки, регистрация на сайте через office. Помогите реализовать переход по определенной странице после заполнения формы, не после активации а именно после первичного заполнения.
Может кто еще сталкивался как одновременно по кнопке отправить данные и закрыть модальное окно бутсрап
Может кто еще сталкивался как одновременно по кнопке отправить данные и закрыть модальное окно бутсрап
Комментарии: 27
Присоединяюсь к вопросу. Может быть кто-то внедрял у себя?
По идее можно написать плагин на событие OnUserFormSave.
Андрей, спасибо за подсказку. Можете помочь примером?
<?php
switch ($modx->event->name) {
case 'OnUserFormSave':
header( 'Location: http://sitename.ru/pagename.html', true, 301 );
break;
}
Ну примерно как то так, не проверял, но в тории должно сработать.
Не лишним будет ограничить активацию при помощи $mode === 'new', плюс исключить контекст mgr, иначе редирект будет происходить при любом сохранении пользователя.
В рамках Office можно также переопределить функцию Office.Auth:
В рамках Office можно также переопределить функцию Office.Auth:
//...
if (response.success) {
//...
window.location.href = "ссылка для редиректа";
//(можно перехватывать ссылку для редиректа из какого-нибудь input type="hidden" внутри формы для большей универсальности.
}
(функцию можно переопределить так)
Максим, благодарю за подсказку. Вы могли бы написать готовое решение? Отправлю благодарность на телефон или карту.
Если речь о готовом модуле, то нет, не вижу в этом смысла.
Если подразумевалась пошаговая инструкция, то как-то так:
1. В чанке формы регистрации (по умолчанию tpl.Office.auth.login) дописать:
2. Создаем новый js-файл и копируем в него содержимое /assets/components/office/js/auth/default.js
3. Указываем путь до него в системной настройке office_auth_frontend_js
4. В новом файле заменяем данный код:
Опционально, если до редиректа нужно дать время пользователю на просмотр сообщения об успешной регистрации, то строчку window.location.href можно обернуть таймаутом:
Если подразумевалась пошаговая инструкция, то как-то так:
1. В чанке формы регистрации (по умолчанию tpl.Office.auth.login) дописать:
//Код вставляем внутри формы с id="office-auth-register"
//Не забыв указать id нужного ресурса
<input type="hidden" name="redirect" value="{айди_страницы_переадресации | url}" />
2. Создаем новый js-файл и копируем в него содержимое /assets/components/office/js/auth/default.js
3. Указываем путь до него в системной настройке office_auth_frontend_js
4. В новом файле заменяем данный код:
if (response.success) {
Office.Message.success(response.message);
if (!response.data.sms) {
$form.resetForm();
}
}
следующим:if (response.success) {
//Если всплывающее сообщение не нужно, то эту строчку можно убрать
Office.Message.success(response.message);
var redirect_page = $('#office-auth-register').find('input[name="redirect"]');
//В данном коде редирект происходит для всех форм Office, где есть input с name="redirect"
//Если нужно ограничить срабатывание только для формы регистрации,
//то в условие необходимо дописать && $form.attr('id') == 'office-auth-register'
if (redirect_page.length > 0) {
window.location.href = redirect_page.val();
}
else {
if (!response.data.sms) {
$form.resetForm();
}
}
}
Опционально, если до редиректа нужно дать время пользователю на просмотр сообщения об успешной регистрации, то строчку window.location.href можно обернуть таймаутом:
setTimeout(function(){
window.location.href = redirect_page.val();
}, 2000);
Максим, огромное спасибо за мануал!
Мой скайп i_nikolaevich. Напишите, куда отправить «спасибо». :)
Скажите, а есть возможность обойтись без замены JS файла? При обновлении может измениться функциональность. Хотелось бы оставить компонент и его настройки без изменения.
У меня ваш способ не заработал и я просто подставил в сообщение «Ссылка и письмо отправлены вам на почту» js код
Мой скайп i_nikolaevich. Напишите, куда отправить «спасибо». :)
Скажите, а есть возможность обойтись без замены JS файла? При обновлении может измениться функциональность. Хотелось бы оставить компонент и его настройки без изменения.
У меня ваш способ не заработал и я просто подставил в сообщение «Ссылка и письмо отправлены вам на почту» js код
<script>window.location.href = "http://site.ru/page/";</script>
Выше Андрей предлагал вариант с плагином для modx. Этот вариант менее универсален? <?php
switch ($modx->event->name) {
case 'OnUserFormSave':
if($mode == 'new' && $modx->context->key != 'mgr'){
$url = 3; // тут id ресурса с благодарностью
$modx->sendRedirect($modx->makeUrl($url),array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
}
}
Михаил, спасибо огромное! )) Этот плагин будет срабатывать только для определенной формы или для всех на сайте?
Только для регистрации нового юзера во фронте
Искренне благодарен. На коробку конфет куда отправить? ))
Немного добавил на кресло))
Если есть возможность, помогите с мультиселектом для тикетсформ:
modx.pro/help/15382/
modx.pro/help/15382/
А есть сайт где используется? Что бы не поднимать.
Сайт есть. В скайпе удобно написать?
Да, норм
На странице две формы — авторизации и регистрации. Этот плагин срабатывает на форме регистрации, если пользователь сбрасывает пароль (вводит только емейл или имя пользователя, чтобы на почту пришел новый пароль). Можно этого как-то избежать?
Возможность обойтись есть — при помощи плагина. Он вполне себе универсален, просто не дает возможности выводить в процессе редиректа какие-либо сообщения пользователю.
UPD: плюс, на мой взгляд, с точки зрения СЕО, переадресация с помощью js здесь более уместна, чем редирект. Но, возможно, сеошники меня поправят или предложат правильный код ответа (не 301/302).
Вообще, я изначально и писал вариант с переопределением функции (без необходимости замены js), но затем обратил внимание, что родной файл итак содержит, по-сути, всего 1 функцию, которую мы и заменяем.
В итоге загружаемый браузером код увеличивается в два раза без какой-либо необходимости — поэтому я и привел вариант с подменой файла.
UPD: плюс, на мой взгляд, с точки зрения СЕО, переадресация с помощью js здесь более уместна, чем редирект. Но, возможно, сеошники меня поправят или предложат правильный код ответа (не 301/302).
Вообще, я изначально и писал вариант с переопределением функции (без необходимости замены js), но затем обратил внимание, что родной файл итак содержит, по-сути, всего 1 функцию, которую мы и заменяем.
В итоге загружаемый браузером код увеличивается в два раза без какой-либо необходимости — поэтому я и привел вариант с подменой файла.
Может быть можно вызывать кусок JS кода до основного файла?
Для чего?
Так как переадресация должна происходить только после успешной регистрации, вам по-прежнему нужен сегмент, отправляющий данные на проверку и получающие ответ.
Вызов ДО основого файла будет перезаписан новой функцией от Office.
Вызов ПОСЛЕ приведет к тому, что у вас будет 2 идентичных скрипта, работать из которых будет только последний.
Так как переадресация должна происходить только после успешной регистрации, вам по-прежнему нужен сегмент, отправляющий данные на проверку и получающие ответ.
Вызов ДО основого файла будет перезаписан новой функцией от Office.
Вызов ПОСЛЕ приведет к тому, что у вас будет 2 идентичных скрипта, работать из которых будет только последний.
Получится, что если вызвать отдельный файл после основного и в нем отработать только этот кусок:
if (response.success) {
//Если всплывающее сообщение не нужно, то эту строчку можно убрать
Office.Message.success(response.message);
var redirect_page = $('#office-auth-register').find('input[name="redirect"]');
//В данном коде редирект происходит для всех форм Office, где есть input с name="redirect"
//Если нужно ограничить срабатывание только для формы регистрации,
//то в условие необходимо дописать && $form.attr('id') == 'office-auth-register'
if (redirect_page.length > 0) {
window.location.href = redirect_page.val();
}
else {
if (!response.data.sms) {
$form.resetForm();
}
}
}
то остальная функциональность основного файла Office останется без изменений на случай обновления.
В нем не получится отработать только этот кусок, так как нужно переопределить всю функцию. Смотрите:
— когда вызывается файл main/default.js и auth/default.js, в первом определяется переменная Office и вложенные в неё общие функции, а во втором добавляется функция, работающая с авторизацией и регистрацией (и там же инициируется)
— принцип «переопределения» функции в том, что мы как бы переписываем переменную, содержащую саму функцию, и в её последующих вызовах уже будет выполняться то, что мы изменили.
И этот вариант хорош для больших файлов, где масса функций, а нам нужно изменить только одну из них. Например, в mSearch2 — таким образом мы сведем к минимуму проблемы, которые могут появиться при обновлении.
Но в файле auth/default.js всего 1 функция, которую мы и переопределяем. Поэтому в переопределении нет смысла, и вариант со своим файлом наиболее оправдан.
— когда вызывается файл main/default.js и auth/default.js, в первом определяется переменная Office и вложенные в неё общие функции, а во втором добавляется функция, работающая с авторизацией и регистрацией (и там же инициируется)
— принцип «переопределения» функции в том, что мы как бы переписываем переменную, содержащую саму функцию, и в её последующих вызовах уже будет выполняться то, что мы изменили.
И этот вариант хорош для больших файлов, где масса функций, а нам нужно изменить только одну из них. Например, в mSearch2 — таким образом мы сведем к минимуму проблемы, которые могут появиться при обновлении.
Но в файле auth/default.js всего 1 функция, которую мы и переопределяем. Поэтому в переопределении нет смысла, и вариант со своим файлом наиболее оправдан.
Понял. Спасибо за разъяснение. Буду чуточку подкованнее в этом вопросе.
Максим, в любом случае благодарен за помощь. Напишите в скайп куда отправить «спасибо».
Если есть возможность, помогите с мультиселектом для тикетсформ:
modx.pro/help/15382/
Если есть возможность, помогите с мультиселектом для тикетсформ:
modx.pro/help/15382/
Форма регистрации подвисает, пользователь создается, но реакции на фронте нет.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.