AjaxForm + Register
Нигде не нашел решения как сделать регистрацию из стандартного пакета Login через AjaxForm, ниже мое решение может кому пригодиться.
1 Размещаем сниппет 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>
Вот и всё!Рейтинга для размещения в разделе Решения не хватило, поэтому публикую здесь.
Комментарии: 5
$result = $modx->runSnippet('Register', $scriptProperties);
Это вероятно какой то сниппет запускается?
Ну собственно сниппет Register из стандартного пакета Login.
понял, спасибо за комментарий
В скрипте Register есть опция jsonResponse, если ее установить в true тогда получаешь ошибки в JSON формате и никаких кастомных скриптов писать не нужно. Единственное что возврат ошибок идет в объекте response.errors а не в response.data, по этому нужно в JS скрипте AjaxForm присвоить response.data = response.errors;
del
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.