smsValidate

Валидация поля телефона через СМС при отправке AjaxForm+FormIt
Бесплатно
Загрузите дополнение из админки вашего сайта.
Как загрузить?
Автор дополнения
mg15
Пакетов
1
Закачек
10
Автор дополнения
Пакетов
1
Закачек
10
Версия 1.0.7-beta
Дата выпуска 17.11.2024
Загрузки 10
Просмотры 1 110
Внимание, этот компонент несовместим с MODX 3.
Компонент работает при наличии установленного AjaxForm, должен быть подключен jquery. Версия php 7+, версия MODX не ниже 2.7 (на тройке не тестировал). В ходе установки добавляется шаблон с примером вызова AjaxForm, чанк с примером разметки формы и создаются кастомный хук и валидатор FormIt: первый подключает отдельный файл с jquery-кодом на событие af_complete, второй подключает класс, который «рулит» логикой верификации формы по СМС.

Основные преимущества

1. Невмешательство в ядро AjaxForm
2. Простота интеграции в действующую форму
3. Интервал между отправкой повторного СМС для предотвращения скликивания баланса.
4. Наличие тестового режима
5. Компонент срабатывает только в случае заполненных обязательных полей формы
6. Возможность добавления новых классов СМС-провайдера

Все классы СМС-провайдеров должны находиться в директории /core/components/smsvalidate/model/smsvalidate/handlers/. В исходном варианте у компонента есть три класса для отправки СМС:
1. smsRu — файл smsru.class.php (сервис sms.ru)
2. intisteleSms — файл intistelesms.class.php (сервис intistele.com)
3. smscRu — файл smscru.class.php (сервис smsc.ru)

По умолчанию выбран класс smsRu. Данные доступа по API нужно вписать в конфиг класса в конструкторе самостоятельно.

Кастомные классы СМС-провайдеров

Для другого СМС-провайдера можно добавить свой класс: необходимо, чтобы название файла с классом было с суффиксом .class.php и чтобы класс был наследован от интерфейса sendSmsInterface, в котором заданы обязательные методы __construct() и send().

  1. В метод construct() должен быть передан объект класса modX.
  2. В метод send() передаются номер телефона и проверочный код, метод возвращает true в случае успешной отправки СМС, либо false.

Настройки компонента

  • smsvalidate.sms_time_limit — время до повторной отправки СМС (в секундах) — если пусто, выставляется 30 секунд по умолчанию.
  • smsvalidate.sms_test — включение тестового режима — если выбрать 'да', то СМС на введенный в форме номер телефона не отправляется, а сгенерированный код выводится на экран
  • smsvalidate.sms_button_repeat_class — класс кнопки для повторной отправки СМС — кнопка для повторной отправки СМС в форме генерируется компонентом автоматически, есть возможность задать ей свой класс для css-стилизации
  • smsvalidate.sms_code_length — длина СМС-кода (не более 10)
  • smsvalidate.sms_handler_class — класс СМС-обработчика — вводится название класса СМС провайдера, по умолчанию выбирается smsRu.


Быстрый старт

1. Установить компонент из транспортного пакета.
2. В коде вызова сниппета AjaxForm добавить параметры:
'renderHooks' => 'smsValidateInit',
'customValidators' => 'smsValidate',

в параметр 'validate' добавить обращение к СМС-валидатору
'sms_code:smsValidate=^phone^'
(где 'phone — имя поля для ввода телефона)

3. В коде чанка с формой добавить блок с разметкой поля для валидации по СМС. Пример в чанке smsvalidate_form. Классы разметки с префиксом js служебные, их нельзя удалять или менять, также нельзя удалять инпуты и спан с классом error_sms_code из этого контейнера. Соблюдая эти условия, можно без проблем стилизовать контейнер доп.классами под текущий дизайн сайта.

Как демо-вариант, можно подключить установленный из пакета шаблон на ресурс, по умолчанию включен тестовый режим, когда код для СМС выводится на экран и в лог админки.

1.0.7-beta

  • Рефакторинг js-кода для разделения форм

1.0.6-beta

  • Добавление класса smscRu, проверка в классе intisteleSms формата номера, так как начинающееся с 8 сервис не пропускает

1.0.5-beta

  • Разделение сессий для разных форм

1.0.4-beta

  • Добавление настройки smsvalidate.sms_code_length, рефакторинг нейминга

1.0.2-beta

  • Добавил файлы docs

1.0.1-beta

  • Первый релиз

Последние обсуждения в сообществе MODX.pro