Скачать и распаковать последнюю версию
Создать директорию с формой (например,
callme).В директории создать файл-обработчик формы:
handler.phpи шаблон письмаemail.php(необязательно).Подключить файл forma.min.js
<scriptsrc="js/forma.min.js"></script>
Обернуть форму в элемент
<forma-form>. Атрибутtargetформы должен содержать адрес обработчика формы (например,/forma/callme/handler.php)<forma-form><formaction="/forma/callme/handler.php" method="post"></form></forma-form>
Добавить элементы для вывода сообщений:
<forma-successdefault="Спасибо! Мы свяжемся с вами в ближайшее время!"><forma-success>
- неправильно заполненные поля
- и т.д.
<forma-faildefault="Произошла ошибка! Проверьте данные и попробуйте отправить форму ещё раз!"></forma-fail>
- ошибка сервера
- невозможность отправки письма
- и т.д.
<forma-errordefault="Произошла ошибка! Попробуйте отправить форму ещё раз позднее!"></forma-error>
<forma-formclass="callme" imnotarobot="imnotarobot!"><h2>Заказать звонок</h2><divclass="callme-success"><forma-successdefault="Спасибо! Мы свяжемся с вами в ближайшее время!"><forma-success></div><divclass="callme-errors"><forma-faildefault="Произошла ошибка! Проверьте данные и попробуйте отправить форму ещё раз!"></forma-fail><forma-errordefault="Произошла ошибка! Попробуйте отправить форму ещё раз позднее!"></forma-error></div><formaction="/forma/callme/handler.php" method="post"><inputtype="text" name="name" requiredplaceholder="Введите имя" /><inputtype="tel" name="phone" requiredplaceholder="Введите телефон" /><buttontype="submit">Отправить</button></form></forma-form><?phpnamespacePopArtDesign\Forma;
require_once__DIR__ . '/../forma.php';
imnotarobot();
recaptcha();
$data = validate([
'name' => 'required|minlength:2|maxlength:50',
'phone' => 'required|phone',
]);
$config['mail_message'] = loadTemplate(__DIR__ . '/email.php', $data);
mail();
success();Валидация осуществляется при помощи вызова функции validate(), принимающей список имён полей и соответствющих им правил валидации, разделённых символом |:
// Возвращает массив проверенных данных$data = validate([
'name' => 'required|minlength:2|maxlength:50',
'phone' => 'required|phone',
'email' => 'nullable|email',
'message' => 'required|maxlength:1000',
'file' => 'nullable|uploaded_file:0,1M',
]);Для валидации используется библиотека rakit/validation.
Основные правила:
required: Поле обязательно для заполненияnullable: Поле НЕ обязательно для заполненияphone: Номер телефонаemail: Emailurl: URLminlength: Минимальная длина строки. Пример:minlength:5maxlength: Максимальная длина строки. Пример:maxlength:1000min: Минимальное значение числа. Пример:min:5max: Максимальное значение числа. Пример:max:10
Все поля формы должны быть описаны в массиве правил. Для каждого поля обязательно нужно указать required или nullable.
После установки поведение форм можно изменить в следующих файлах:
config.php: файл с глобальной конфигурацией для всех форм
в файле обработчика формы (
callme/handler.phpи т.д.):require_once__DIR__ . '/../forma.php'; $config['mail_subject'] = $config['site_name'] . ': заказать звонок';
Элемент <forma-form> может находиться в нескольких состояниях:
initial- исходное состояниеsubmit- форма отправляетсяsuccess- форма успешно отправленаfail- ошибка, которую можно исправитьerror- фатальная ошибка
Информация о состоянии доступна через атрибут state. Это можно использовать для настройки внешнего вида формы через CSS:
/** Сокрытие кнопки во время отправки формы */forma-form[state="submit"] [type="submit"] {
display: none;
}В простейшем случае для защиты от роботов можно добавлять в форму специальное поле при помощи JavaScript:
<forma-formimnotarobot="imnotarobot!">Значение поля нужно указать в config.php:
$config['imnotarobot_value'] = 'imnotarobot!';Создать капчу в консоли администратора
Подключить скрипт:
<scriptsrc="https://www.google.com/recaptcha/api.js"></script>
Добавить к форме идентификатор (например,
id="myForm")<formid="myForm"></form>
Изменить кнопку отправки, указав ключ для капчи и корректный идентификатор формы:
<buttontype="submit" class="g-recaptcha" data-sitekey="КЛЮЧ ДЛЯ КАПЧИ" data-action="myForm" data-callback="submitMyForm" ><script>functionsubmitMyForm(token){document.forms['myForm'].requestSubmit()}</script> Отправить </button>
В файле config.php указать секретный ключ:
$config['recaptcha_secret'] = 'SECRET KEY'; // Также полезно указать идентификатор действия (формы)// из data-action в файле-обработчике$config['recaptcha_action'] = 'myForm';