Страница благодарности за регистрацию

Уважаемые знатоки, регистрация на сайте через office. Помогите реализовать переход по определенной странице после заполнения формы, не после активации а именно после первичного заполнения.
Может кто еще сталкивался как одновременно по кнопке отправить данные и закрыть модальное окно бутсрап
v2254303
05 июля 2015, 19:53
modx.pro
2 440
0

Комментарии: 27

Wassi Wassinen
13 мая 2018, 15:52
0
Присоединяюсь к вопросу. Может быть кто-то внедрял у себя?
    Андрей
    13 мая 2018, 17:00
    0
    По идее можно написать плагин на событие OnUserFormSave.

      Wassi Wassinen
      13 мая 2018, 18:30
      0
      Андрей, спасибо за подсказку. Можете помочь примером?
        Андрей
        14 мая 2018, 00:06
        0
        <?php
        switch ($modx->event->name) {
        	case 'OnUserFormSave':
        		header( 'Location: http://sitename.ru/pagename.html', true, 301 );
        		break;
        }

        Ну примерно как то так, не проверял, но в тории должно сработать.
          Максим Кузнецов
          14 мая 2018, 01:20
          +1
          Не лишним будет ограничить активацию при помощи $mode === 'new', плюс исключить контекст mgr, иначе редирект будет происходить при любом сохранении пользователя.

          В рамках Office можно также переопределить функцию Office.Auth:
          //...
          if (response.success) {
          	//...
          	window.location.href = "ссылка для редиректа";
          	//(можно перехватывать ссылку для редиректа из какого-нибудь input type="hidden" внутри формы для большей универсальности.
          }
          (функцию можно переопределить так)
            Wassi Wassinen
            14 мая 2018, 15:00
            0
            Максим, благодарю за подсказку. Вы могли бы написать готовое решение? Отправлю благодарность на телефон или карту.
              Максим Кузнецов
              14 мая 2018, 15:41
              1
              +2
              Если речь о готовом модуле, то нет, не вижу в этом смысла.

              Если подразумевалась пошаговая инструкция, то как-то так:

              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);
                Wassi Wassinen
                14 мая 2018, 23:49
                0
                Максим, огромное спасибо за мануал!

                Мой скайп i_nikolaevich. Напишите, куда отправить «спасибо». :)

                Скажите, а есть возможность обойтись без замены JS файла? При обновлении может измениться функциональность. Хотелось бы оставить компонент и его настройки без изменения.

                У меня ваш способ не заработал и я просто подставил в сообщение «Ссылка и письмо отправлены вам на почту» js код
                <script>window.location.href = "http://site.ru/page/";</script>
                Выше Андрей предлагал вариант с плагином для modx. Этот вариант менее универсален?
                  Михаил
                  15 мая 2018, 06:41
                  2
                  0
                  <?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'));
                  }
                  }
                    Wassi Wassinen
                    15 мая 2018, 14:24
                    0
                    Михаил, спасибо огромное! )) Этот плагин будет срабатывать только для определенной формы или для всех на сайте?
                      Михаил
                      15 мая 2018, 14:47
                      0
                      Только для регистрации нового юзера во фронте
                      Wassi Wassinen
                      15 мая 2018, 15:49
                      0
                      Искренне благодарен. На коробку конфет куда отправить? ))
                      Wassi Wassinen
                      15 мая 2018, 18:23
                      0
                      Немного добавил на кресло))
                      Wassi Wassinen
                      15 мая 2018, 15:52
                      0
                      Если есть возможность, помогите с мультиселектом для тикетсформ:
                      modx.pro/help/15382/
                      Михаил
                      15 мая 2018, 16:07
                      0
                      А есть сайт где используется? Что бы не поднимать.
                      Wassi Wassinen
                      15 мая 2018, 18:23
                      0
                      Сайт есть. В скайпе удобно написать?
                      Михаил
                      15 мая 2018, 18:42
                      0
                      Да, норм
                    Wassi Wassinen
                    19 мая 2018, 12:20
                    0
                    На странице две формы — авторизации и регистрации. Этот плагин срабатывает на форме регистрации, если пользователь сбрасывает пароль (вводит только емейл или имя пользователя, чтобы на почту пришел новый пароль). Можно этого как-то избежать?
                    Максим Кузнецов
                    15 мая 2018, 07:09
                    0
                    Возможность обойтись есть — при помощи плагина. Он вполне себе универсален, просто не дает возможности выводить в процессе редиректа какие-либо сообщения пользователю.

                    UPD: плюс, на мой взгляд, с точки зрения СЕО, переадресация с помощью js здесь более уместна, чем редирект. Но, возможно, сеошники меня поправят или предложат правильный код ответа (не 301/302).

                    Вообще, я изначально и писал вариант с переопределением функции (без необходимости замены js), но затем обратил внимание, что родной файл итак содержит, по-сути, всего 1 функцию, которую мы и заменяем.
                    В итоге загружаемый браузером код увеличивается в два раза без какой-либо необходимости — поэтому я и привел вариант с подменой файла.
                      Wassi Wassinen
                      15 мая 2018, 14:23
                      0
                      Может быть можно вызывать кусок JS кода до основного файла?
                        Максим Кузнецов
                        15 мая 2018, 14:32
                        0
                        Для чего?

                        Так как переадресация должна происходить только после успешной регистрации, вам по-прежнему нужен сегмент, отправляющий данные на проверку и получающие ответ.

                        Вызов ДО основого файла будет перезаписан новой функцией от Office.
                        Вызов ПОСЛЕ приведет к тому, что у вас будет 2 идентичных скрипта, работать из которых будет только последний.
                        Wassi Wassinen
                        15 мая 2018, 15:48
                        0
                        Получится, что если вызвать отдельный файл после основного и в нем отработать только этот кусок:

                        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 останется без изменений на случай обновления.
                        Максим Кузнецов
                        15 мая 2018, 16:01
                        0
                        В нем не получится отработать только этот кусок, так как нужно переопределить всю функцию. Смотрите:
                        — когда вызывается файл main/default.js и auth/default.js, в первом определяется переменная Office и вложенные в неё общие функции, а во втором добавляется функция, работающая с авторизацией и регистрацией (и там же инициируется)
                        — принцип «переопределения» функции в том, что мы как бы переписываем переменную, содержащую саму функцию, и в её последующих вызовах уже будет выполняться то, что мы изменили.

                        И этот вариант хорош для больших файлов, где масса функций, а нам нужно изменить только одну из них. Например, в mSearch2 — таким образом мы сведем к минимуму проблемы, которые могут появиться при обновлении.

                        Но в файле auth/default.js всего 1 функция, которую мы и переопределяем. Поэтому в переопределении нет смысла, и вариант со своим файлом наиболее оправдан.
                        Wassi Wassinen
                        15 мая 2018, 18:18
                        0
                        Понял. Спасибо за разъяснение. Буду чуточку подкованнее в этом вопросе.
                        Wassi Wassinen
                        15 мая 2018, 15:53
                        0
                        Максим, в любом случае благодарен за помощь. Напишите в скайп куда отправить «спасибо».

                        Если есть возможность, помогите с мультиселектом для тикетсформ:
                        modx.pro/help/15382/
            Wassi Wassinen
            19 мая 2018, 12:51
            0
            Форма регистрации подвисает, пользователь создается, но реакции на фронте нет.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      27