СМС-валидация AjaxForm по номеру телефона
Поступила заявка на реализацию функционала проверки номера телефона через СМС при отправке формы на основе AjaxForm+FormIt. Основными требованиями были:
1. Невмешательство в ядро AjaxForm
2. Простота интеграции в действующую форму (в идеале, как говорится, в пару кликов).
3. Интервал между отправкой повторного СМС для предотвращения скликивания баланса.
4. Наличие тестового режима
5. Компонент срабатывает только в случае заполненных обязательных полей формы
6. Возможность добавления новых классов СМС-провайдера
Был написан и собран в пакет простенький компонент, реализующий СМС-верификацию формы перед ее отправкой.
Компонент работает при наличии установленного AjaxForm, должен быть подключен jquery. Версия php 7+, версия MODX не ниже 2.7 (на тройке не тестировал). В ходе установки добавляется шаблон с примером вызова AjaxForm и чанк с примером разметки формы, подключается отдельный файл с jquery кодом на событие af_complete.
После установки можно сразу протестить работу компонента, прикрепив новый шаблон к какому-либо ресурсу. По умолчанию включен тестовый режим, код для СМС выводится на экран и в лог админки.
В исходном варианте у компонента есть три класса для отправки СМС:
1. smsRu, файл smsru.class.php (сервис sms.ru)
2. intisteleSms, файл intistelesms.class.php (сервис intistele.com)
3. smscRu — файл smscru.class.php (сервис smsc.ru)
Но легко можно добавить свой собственный класс, описание настроек тут — github.com/alexxx-ivanow/smsValidate
Быстрый старт
1. Установить компонент из транспортного пакета.
2. В коде вызова сниппета AjaxForm добавить параметры:
3. В коде чанка с формой добавить блок с разметкой поля для валидации по СМС. Пример в чанке 'smsvalidate_form'. Классы разметки с префиксом js служебные, их нельзя удалять или менять, также нельзя удалять инпуты и спан с классом error_sms_code из этого контейнера. Соблюдая эти условия, можно без проблем стилизовать контейнер доп.классами под текущий дизайн сайта.
=============
Как демо-вариант, можно подключить установленный из пакета шаблон на ресурс, по умолчанию включен тестовый режим, когда код для СМС выводится на экран и в лог админки.
компонент на маркетплейсе
=============
AjaxForm более не поддерживается, появились более современные обертки для FormIt. Перейти на эти обертки, так понимаю, не очень сложно, в основном, это касается js-составляющей. Но есть сайты, владельцы которых по какой-то причине не готовы переписывать код, поэтому компонент может быть кому-то полезен. Да и в принципе обратная связь приветствуется. Плюс это практически 100% защита от спама, хотя, мне кажется, в этом направлении не будет спроса, так как отправка СМС — вещь платная.
P.S. Обращаю внимание, что некоторые странности в логике формирования ответа сервера из класса (к примеру, добавление кнопки повтора в разметку) продиктованы именно условием невмешательства в AjaxForm.
Всем добра!
1. Невмешательство в ядро AjaxForm
2. Простота интеграции в действующую форму (в идеале, как говорится, в пару кликов).
3. Интервал между отправкой повторного СМС для предотвращения скликивания баланса.
4. Наличие тестового режима
5. Компонент срабатывает только в случае заполненных обязательных полей формы
6. Возможность добавления новых классов СМС-провайдера
Был написан и собран в пакет простенький компонент, реализующий СМС-верификацию формы перед ее отправкой.
Компонент работает при наличии установленного AjaxForm, должен быть подключен jquery. Версия php 7+, версия MODX не ниже 2.7 (на тройке не тестировал). В ходе установки добавляется шаблон с примером вызова AjaxForm и чанк с примером разметки формы, подключается отдельный файл с jquery кодом на событие af_complete.
После установки можно сразу протестить работу компонента, прикрепив новый шаблон к какому-либо ресурсу. По умолчанию включен тестовый режим, код для СМС выводится на экран и в лог админки.
В исходном варианте у компонента есть три класса для отправки СМС:
1. smsRu, файл smsru.class.php (сервис sms.ru)
2. intisteleSms, файл intistelesms.class.php (сервис intistele.com)
3. smscRu — файл smscru.class.php (сервис smsc.ru)
Но легко можно добавить свой собственный класс, описание настроек тут — github.com/alexxx-ivanow/smsValidate
Быстрый старт
1. Установить компонент из транспортного пакета.
2. В коде вызова сниппета AjaxForm добавить параметры:
'renderHooks' => 'smsValidateInit',
'customValidators' => 'smsValidate',
в параметр 'validate' добавить обращение к СМС-валидатору 'sms_code:smsValidate=^phone^'
(где 'phone — имя поля для ввода телефона)3. В коде чанка с формой добавить блок с разметкой поля для валидации по СМС. Пример в чанке 'smsvalidate_form'. Классы разметки с префиксом js служебные, их нельзя удалять или менять, также нельзя удалять инпуты и спан с классом error_sms_code из этого контейнера. Соблюдая эти условия, можно без проблем стилизовать контейнер доп.классами под текущий дизайн сайта.
=============
Как демо-вариант, можно подключить установленный из пакета шаблон на ресурс, по умолчанию включен тестовый режим, когда код для СМС выводится на экран и в лог админки.
компонент на маркетплейсе
=============
AjaxForm более не поддерживается, появились более современные обертки для FormIt. Перейти на эти обертки, так понимаю, не очень сложно, в основном, это касается js-составляющей. Но есть сайты, владельцы которых по какой-то причине не готовы переписывать код, поэтому компонент может быть кому-то полезен. Да и в принципе обратная связь приветствуется. Плюс это практически 100% защита от спама, хотя, мне кажется, в этом направлении не будет спроса, так как отправка СМС — вещь платная.
P.S. Обращаю внимание, что некоторые странности в логике формирования ответа сервера из класса (к примеру, добавление кнопки повтора в разметку) продиктованы именно условием невмешательства в AjaxForm.
Всем добра!