Плагин подтверждения регистрации через 6-значный код - CodeHawk OTP
Характеристики
{xfields}CodeHawk Register OTP заменяет устаревшее подтверждение регистрации по ссылке из письма на современный сценарий с 6-значным кодом. Пользователь регистрируется, получает код на email и вводит его прямо на сайте — без переходов по ссылкам, без лишних вкладок и без потери конверсии.
Плагин работает поверх штатного механизма DLE, не ломает регистрацию через соцсети и полностью вписывается в стандартный шаблон Default.
Преимущества плагина:
Для пользователя
- Привычный сценарий как в банках, маркетплейсах и сервисах: код из письма → ввод на сайте
- Не нужно искать ссылку в письме и бояться, что она не откроется
- Код можно скопировать и вставить - поле оптимизировано под 6 цифр
- Понятные сообщения об ошибках и возможность запросить код повторно
Для владельца
- Рост конверсии регистрации: пользователь остаётся на сайте, а не уходит в почту
- Профессиональный UX без доработки «с нуля»
- Стили и скрипты в папке шаблона - полный контроль над дизайном
- Не нужно править файлы плагина при смене оформления
- Установка через xml-плагин DLE за несколько минут
- Подробная документация и готовые snippets в комплекте
Основной функционал плагина
• Подтверждение email 6-значным одноразовым кодом вместо ссылки
• Автоматическая отправка кода в письме через тег {%validationcode%}
• Страница ввода кода с маскированным email (s***n@gmail.com)
• Повторная отправка кода с визуальным таймером обратного отсчёта
• Отдельные экраны: ввод кода → успех → заполнение профиля
• Вывод ошибок при неверном коде, истечении срока или превышении попыток
• Подсказка пользователю проверить папку «Спам»
• Полная совместимость с дополнительными полями профиля DLE ({xfields})
• AJAX-модуль для статуса, повторной отправки и проверки кода
• Готовая разметка под стандартный шаблон DLE (Default / Centroarts)
Плагин полностью оптимизирован и безопасен
• Коды хранятся в БД в виде password_hash (bcrypt)
• Срок действия кода: 15 минут - просроченные коды автоматически недействительны
• Лимит попыток ввода. Защита от перебора (brute force)
• Защита от спама на email
• Привязка к сессии после успешной проверки - нельзя активировать чужой аккаунт без кода
• CSRF-защита AJAX-запросов через user_hash / dle_login_hash
• Отдельная таблица {prefix}_register_otp - изолированное хранение OTP-данных
• Плагин не затрагивает стандартную регистрацию через OAuth (Google, VK, Яндекс)
• CSS и JS подключаются только на странице регистрации ([available=register])
• Лёгкий jаvascript без jQuery-зависимости - нативный fetch и DOM API
• Минимальный CSS (~100 строк) — только OTP-специфичные дополнения, базовые стили берутся из шаблона DLE
• AJAX-запросы только по действию пользователя (resend, status) - нет фонового опроса сервера и БД
• Кеширование статических ассетов через Cache-Control (86400 сек)
• Одна компактная таблица в БД с индексами по token_hash, email, expires_at
• Патчи register.php точечные, они не дублируют логику DLE, а лишь дополняют её
CodeHawk Register OTP — это современное, безопасное и удобное решение для подтверждения регистрации на сайтах DataLife Engine. Вы получаете привычный пользователям формат OTP, полный контроль над дизайном, продуманную безопасность и минимальную нагрузку на сайт — без компромиссов между UX, гибкостью и надёжностью.
- Релиз
CodeHawk Register OTP — подтверждение регистрации 6-значным кодом из письма. Требуется CodeHawk Core и лицензия на этот модуль. DLE 17.0+.
Содержание
- Установка
- Письмо с кодом
- CSS и JS в main.tpl
- Шаблон registration.tpl
- Короткие коды
- Обновление
- Удаление
- Частые проблемы
Установка
1. CodeHawk Core и лицензия
- Установите и включите CodeHawk Core (Сторонние модули).
- Откройте раздел CodeHawk в админке.
- Активируйте лицензию CodeHawk Register OTP.
2. Плагин OTP
- Сторонние модули → загрузите
codehawk-otp.zipиз личного кабинета. - Нажмите Установить и включите плагин.
3. Настройки DLE
Настройки системы:
- Разрешить регистрацию — включено
- Подтверждение регистрации по E-Mail — включено
4. Шаблон и письмо
Дальше по порядку:
- Добавьте код в письмо reg_mail
- Скопируйте CSS/JS и подключите в main.tpl
- Вставьте блок OTP в registration.tpl
5. Проверка
- Откройте сайт в режиме инкогнито → регистрация.
- Заполните форму, проверьте почту (и папку «Спам»).
- Введите 6-значный код на странице «Продолжение регистрации».
Письмо с кодом
Настройки → E-Mail → Сообщение для активации аккаунта (reg_mail).
Обязательно добавьте тег:
{%validationcode%}
Пример фрагмента письма:
Здравствуйте, {%username%}!
Ваш код для подтверждения регистрации:
{%validationcode%}
Код действует 15 минут.
Тег {%validationlink%} больше не обязателен — пользователь вводит код на сайте.
CSS и JS в main.tpl
{TEMPLATE} — в этой инструкции так обозначен путь к папке шаблона. В реальном main.tpl используйте штатный тег DLE для пути к теме — тот же, что для css/styles.css и js/lib.js.
1. Из архива плагина скопируйте в папку шаблона:
assets/ch-otp.css → {TEMPLATE}/css/ch-otp.css
assets/ch-otp.js → {TEMPLATE}/js/ch-otp.js
2. В main.tpl, секция <head>:
[available=register]
<link rel="stylesheet" href="{TEMPLATE}/css/ch-otp.css">
[/available]
3. В main.tpl, после {AJAX}:
{AJAX}
[available=register]
<script src="{TEMPLATE}/js/ch-otp.js"></script>
[/available]
Скрипт должен идти ниже {AJAX}, иначе не работает повторная отправка кода и таймер.
Шаблон registration.tpl
Файл registration.tpl — в папке вашего шаблона.
Внутри [validation]...[/validation] замените стандартный текст на содержимое файла snippets/registration-otp.tpl из архива (или на код ниже).
Готовый фрагмент
[otp]
<div class="regtext">
6-значный код отправлен на <strong>{reg_otp_email}</strong>. Введите его ниже.
</div>
<div class="ch-otp-notice">
Не пришло письмо? Проверьте папку <strong>Спам</strong>.
</div>
<ul class="ui-form">
<li class="form-group ch-otp" id="registerOtp" data-resend-wait="{reg_otp_resend_wait}" data-reg-id="{reg_otp_id}">
<input type="hidden" name="id" id="id" value="{reg_otp_id}">
<label for="reg_otp_code">Код подтверждения</label>
<input type="text" name="reg_otp_code" id="reg_otp_code" class="wide ch-otp__code" inputmode="numeric" maxlength="6" placeholder="000000" required>
<div class="ch-otp__error" id="regOtpError" hidden>{reg_otp_error}</div>
<div class="ch-otp__hint" id="regOtpHint"></div>
</li>
</ul>
<div class="form_submit">
<button type="submit" class="btn btn-big" id="regOtpSubmit">Подтвердить</button>
<button type="button" class="btn-border btn-big ch-otp__resend" id="regOtpResend">Отправить код повторно</button>
</div>
[/otp]
[success]
<div class="ch-otp-success" id="registerSuccess">
<h2 class="title h2">Регистрация завершена</h2>
<div class="regtext">{reg_success_text}</div>
</div>
[/success]
[reg_profile]
<div class="regtext">Заполните дополнительные поля профиля.</div>
<ul class="ui-form">
<li class="form-group">
<label for="fullname">Ваше имя</label>
<input type="text" id="fullname" name="fullname" class="wide">
</li>
<li class="form-group"><div class="user_fields">{xfields}</div></li>
</ul>
<div class="form_submit">
<button class="btn btn-big" type="submit">Отправить</button>
</div>
[/reg_profile]
Блоки [otp], [success], [reg_profile] — внутри [validation]. Блок [registration] не удаляйте.
При своей вёрстке можно менять классы, но не меняйте id: registerOtp, reg_otp_code, regOtpError, regOtpResend, regOtpHint, registerSuccess.
Короткие коды
main.tpl — только на странице регистрации
[available=register]
<link rel="stylesheet" href="{TEMPLATE}/css/ch-otp.css">
[/available]
registration.tpl — этапы после отправки формы
| Блок | Когда показывается |
|---|---|
[otp]...[/otp] | Ввод кода из письма |
[success]...[/success] | Регистрация завершена |
[reg_profile]...[/reg_profile] | Доп. поля профиля |
Переменные в registration.tpl
| Тег | Описание |
|---|---|
{reg_otp_email} | Email (частично скрыт) |
{reg_otp_error} | Текст ошибки |
{reg_otp_resend_wait} | Секунды до повторной отправки |
{reg_otp_id} | Токен (скрытое поле) |
{reg_success_text} | Текст успеха |
{xfields} | Доп. поля DLE |
Письмо reg_mail
{%validationcode%}
Обновление
Только через CodeHawk Core — вручную xml загружать не нужно.
- Раздел CodeHawk → Установленные продукты.
- CodeHawk Register OTP → Проверить.
- Если есть версия — Установить новую версию.
Файлы шаблона (ch-otp.css, ch-otp.js, registration.tpl) при обновлении не трогаются.
Удаление
- Отключите и удалите плагин в Сторонние модули.
- Уберите блоки
[otp],[success],[reg_profile]изregistration.tpl. - Уберите подключение
ch-otp.cssиch-otp.jsизmain.tpl. - Удалите
{TEMPLATE}/css/ch-otp.cssи{TEMPLATE}/js/ch-otp.js(по желанию).
Частые проблемы
Код не приходит на email
- Проверьте SMTP в Настройки → E-Mail.
- В reg_mail есть
{%validationcode%}. - Включено подтверждение регистрации по email.
- Проверьте папку «Спам».
«Лицензия не активирована»
- CodeHawk Core установлен и включён.
- В разделе CodeHawk активирована лицензия на Register OTP.
Нет формы ввода кода
- В
registration.tplвнутри[validation]есть блок[otp]...[/otp]. - Включено подтверждение регистрации по email.
Не работают стили или кнопка «Отправить повторно»
- Файлы
ch-otp.cssиch-otp.jsскопированы в папку шаблона. - В
main.tplподключены CSS и JS в блоке[available=register]. - JS подключён после
{AJAX}. - В разметке сохранены нужные
id(см. шаблон).
Ошибки при установке плагина
- Удалите старую версию, очистите ошибки в Сторонние модули.
- Установите заново или обновите через CodeHawk Core.
Если не помогло — поддержка на codehawk.ru.





Расскажите о своём опыте или задайте вопрос — ответим в комментариях или по почте.