AjaxForm + Register

Нигде не нашел решения как сделать регистрацию из стандартного пакета Login через AjaxForm, ниже мое решение может кому пригодиться.

1 Размещаем сниппет AjaxForm где требуется (на странице, в попап окне и т.п.)

[[!AjaxForm?
    &snippet=`custRegister`
    &form=`tpl.register.form`
    &submitVar=`signup-btn`
    &activationResourceId=`9`
    &activationEmailTpl=`lgnActivateEmailTpl`
    &activationEmailSubject=`Thanks for Registering!`
    &usergroups=`Users`
    &usernameField=`email`
    &generatePassword=`1`
    &validate=`nospam:blank,
               fullname:required:minLength=^3^,
               email:required:email`
    &placeholderPrefix=`reg.`
]]
2 Создаем чанк tpl.register.form с формой

<form id="signup-form" action="[[~[[*id]]]]" method="post">
    <input type="hidden" name="nospam">
    <input type="hidden" name="password" value="11111111">
    <input type="text" name="fullname">
    <small class="alert-fullname"></small>
    <input type="email" name="email">
    <small class="alert-email"></small>
    <input type="submit" name="signup-btn" form="signup-form" value="Signup">
</form>
3 Создаем сниппет custRegister

<?php
$result = $modx->runSnippet('Register', $scriptProperties);
foreach($modx->placeholders as $key => $ph){
    if(strpos($key, $scriptProperties[placeholderPrefix].'error.') === 0) $placeholders[$key] = $ph;
}
if($modx->getPlaceholder($scriptProperties[placeholderPrefix].'validation_error')) return $AjaxForm->error('Form has errors', array('error' => $placeholders));
else return $AjaxForm->success('Form is valid');
4 На странице с формой добавляем скрипт, который заполнит алерты или сообщит об успехе или еще все что угодно

<script>
    $(document).on('af_complete', function(event, response){
        $.each(response.data.error, function(index, value){$(response.form).find('.alert-' + index.split(".").pop()).html(value);});
        response.message='';//jGrowl - off
    });
</script>
Вот и всё!
Рейтинга для размещения в разделе Решения не хватило, поэтому публикую здесь.
Greza
14 января 2020, 17:21
modx.pro
12
2 402
+2

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

Станислав
14 января 2020, 18:27
0
$result = $modx->runSnippet('Register', $scriptProperties);
Это вероятно какой то сниппет запускается?
    Greza
    14 января 2020, 20:27
    0
    Ну собственно сниппет Register из стандартного пакета Login.
      Станислав
      14 января 2020, 22:33
      0
      понял, спасибо за комментарий
    Pavel Kravchuk
    03 апреля 2020, 23:24
    1
    0
    В скрипте Register есть опция jsonResponse, если ее установить в true тогда получаешь ошибки в JSON формате и никаких кастомных скриптов писать не нужно. Единственное что возврат ошибок идет в объекте response.errors а не в response.data, по этому нужно в JS скрипте AjaxForm присвоить response.data = response.errors;
      Илья Александрович
      02 декабря 2020, 11:11
      0
      del
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        5