[AjaxFormitLogin] AjaxForm на стрероидах и чистом JS
Приветствую, коллеги. Всех с наступающим! В честь этого праздника, я решил сделать сообществу подарок и собрал некоторые свои наработки в пакет. Надеюсь в новом году он кому-нибудь облегчит жизнь. Примеры вызовов можно найти в папке компонента в подпапке templates.
Отличия от AjaxForm:
1. Нет jQuery.
2. Для показа уведомлений используется библиотека IziToast.
3. Принимает параметр clearFieldsOnSuccess, тем самым позволяя управлять очисткой полей при успешной оправке формы.
4. Принимает параметр transmittedParams (значение должно быть валидным JSON), который позволяете передавать в JS кастомные параметры отдельно при успешной, отдельно при неудачной отправке.
5. Позволяет отображать процесс загрузки файлов на сервер, для этого нужно указать параметр showUploadProgress со значением 1.
6. Событие af_complete заменено на afl_complete.
8. Работают редиректы. Для этого необходимо указать параметр redirectTo (абсолютная ссылка или ID ресурса) и, при необходимости изменить стандартное значение в 2с, redirectTimeout (в милисекундах) для задания задержки перед переходом на другую страницу.
9. Добавлен метод помогающий валидировать чекбоксы. Для его работы необходимо проверяемому чекбоксу добавить атрибут data-afl-required, где значением будет ключ указанный в параметре validate, а также нужно добавить скрытое поле с этим именем в форму. Самому чекбоксу имя можно не указывать.
10. Нет поддержки капчи от гугла, но встроена собственная защита от спама по методу Алексея Смирнова. Для активации нужно в вызове указать параметр spamProtection со значением 1.
11. Есть возможность регистрации, авторизации, сброса пароля и редактирования личных данных, при условии установки компонента FormIt.Подробнее о поддерживаемых параметрах можно прочитать в этой заметке
12. При обновлении данных пользователя добавлено системное событие aiOnUserUpdate, которое получает следующие данные $user — объект обновленного пользователя, $profile — его профиль, $data — переданные данные.
Благодарности:
1. @Василий Наумкин за AjaxForm, modExtra и вообще всю базу, которая легла в основу этого компонента.
2. @Баха Волков за код-ревью и подсказки по JS.
3. @Дима Сайт old см. профиль за подсказку по неймингу.
4. @Алексей Смирнов за метод защиты от спама.
Скачать пакет пока можно только с GitHub, как появится в modstore выложу ссылку сюда.
Отличия от AjaxForm:
1. Нет jQuery.
2. Для показа уведомлений используется библиотека IziToast.
3. Принимает параметр clearFieldsOnSuccess, тем самым позволяя управлять очисткой полей при успешной оправке формы.
4. Принимает параметр transmittedParams (значение должно быть валидным JSON), который позволяете передавать в JS кастомные параметры отдельно при успешной, отдельно при неудачной отправке.
5. Позволяет отображать процесс загрузки файлов на сервер, для этого нужно указать параметр showUploadProgress со значением 1.
6. Событие af_complete заменено на afl_complete.
document.addEventListener('afl_complete', e => {
console.log(e.detail.response); // ответ сервера
console.log(e.detail.form); // текущая форма
});7. Изменен формат ответа сервера.8. Работают редиректы. Для этого необходимо указать параметр redirectTo (абсолютная ссылка или ID ресурса) и, при необходимости изменить стандартное значение в 2с, redirectTimeout (в милисекундах) для задания задержки перед переходом на другую страницу.
9. Добавлен метод помогающий валидировать чекбоксы. Для его работы необходимо проверяемому чекбоксу добавить атрибут data-afl-required, где значением будет ключ указанный в параметре validate, а также нужно добавить скрытое поле с этим именем в форму. Самому чекбоксу имя можно не указывать.
10. Нет поддержки капчи от гугла, но встроена собственная защита от спама по методу Алексея Смирнова. Для активации нужно в вызове указать параметр spamProtection со значением 1.
11. Есть возможность регистрации, авторизации, сброса пароля и редактирования личных данных, при условии установки компонента FormIt.Подробнее о поддерживаемых параметрах можно прочитать в этой заметке
12. При обновлении данных пользователя добавлено системное событие aiOnUserUpdate, которое получает следующие данные $user — объект обновленного пользователя, $profile — его профиль, $data — переданные данные.
Благодарности:
1. @Василий Наумкин за AjaxForm, modExtra и вообще всю базу, которая легла в основу этого компонента.
2. @Баха Волков за код-ревью и подсказки по JS.
3. @Дима Сайт old см. профиль за подсказку по неймингу.
4. @Алексей Смирнов за метод защиты от спама.
Скачать пакет пока можно только с GitHub, как появится в modstore выложу ссылку сюда.
Комментарии: 61
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Просто при таком вызове, редактирую fullname сохранить нажал, «Данные сохранены», но они не записались
Модхост сейчас поднял
s31388.h10.modhost.pro/
Простой пользователь
test@test.ru
123123123
админский
s31388.h10.modhost.pro/manager/
s31388
AzbNTYpnYF11
Сейчас все норм и сохраняется, а сохраняется наверно потому что, я до этого под админом открывал сайт, т.е. не был авторизирован в контексте)
Спасибо Артур! буду дальше тестировать :)
Вот мое поле из формы:
в стиппете указываю валидатор:
На выходе валидация не работает, при отправке формы ошибки в консоли
А в вызове
Для минишоп можно как то сделать что бы сообщения подтягивались с вашего дополнения?
Не совсем понятно, что имеется в виду, но предположим, что речь об уведомлениях. Если вы используете новый комплект JS скриптов, то там точно такие же уведомления. Если используете стандартный, то нужно переопределить объект Message.
Если не будет работать используйте задержку через setTimeout, поскольку при импорте скрипт должен быть type=«module», а скрипты этого типа всегда грузятся асинхронно.
name.vTextRequired и name.vTextMinLength
То при незаполненном поле — показывается текст ошибки и с первого валидатора со второго валидатора, хотя до него еще не дошли. Это можно поправить?
Те. если поле не заполнено — показываем name.vTextRequired, если заполнено мало, то name.vTextMinLength
Пользователь создается, на почту приходит письмо с ссылкой для активации (ссылка ведет на главную с ключом).
Перехожу по ней, просто открывается главная.
Проверяю юзера в админке — он все также не активирован. Не пойму как настроить активацию
Сниппет aflActivateUser, куда его ставить, в чем его функция?
Теперь ссылка открывает страницу активации, но при переходе на страницу по ссылке — страница как то рушится, половина страницы не рендерится, а в коде куча такого: «ignore_e1c06d85ae7b8b032bef47e42e4c08f9»
Сама страница стандартная, на ней только:
Из-за чего это может быть, а пользователь не активируется при этом
в консоли браузера, появляется ошибка:
Uncaught (in promise) Error: A listener indicated an asynchronous response by returning true, but the message channel closed before a response was received
При отправке формы регистрации:
все поля принимают disabled
magazin.ru.xsph.ru/assets/components/ajaxformitlogin/action.php 500 (Internal Server Error)
В логах сервера:
я его добавил, письмо для подтверждения улетело. Перехожу по ссылке, а на странице подтверждения следующий прикол:
пол страницы отрезано, все начина с {set $user = '!aflActivateUser' | snippet:[]}
В консоли ошибка:
/lk/confirmation?lu=YWRtOTNydXNAeWFuZGV4LnJ1 500 (Internal Server Error)
Если этот сниппет убрать, страница загружается нормально.
Вобще вкурить не могу, что я делаю не правильно…
Вобщем решил эксперименты отложить до лучших времен, когда потребность будет, пока вернул Login в работу. С ним проблем не возникает.
Сейчас у меня такой скрипт, он срабатывает на все формы:
я хочу на формы регистрации и.т.п. сделать один уведомления, а на заявки другие
в transmittedParams в success добавил параметр post
ниже его вызвал 'post' => 'true',
И в самом скрипте смотрим был этот параметр вызван или нет
В вызове он включен, но приходит спам, если посмотреть форму через FormIT, то там поле aflsecret пустое, как понимаю, форма не должна отправляться если оно пустое?
форма:
вызов:
Поэтому тут бился в стену какое то время =)