Формы в MODX: как настроить FormIt без лишних ошибок
FormIt принимает данные формы, проверяет их на сервере и запускает обработчики — например, отправляет письмо. Показываем базовую связку для MODX Revolution и объясняем, где чаще всего ломаются валидация, почта и сообщения об ошибках.

В MODX Revolution FormIt может принять заявку, проверить обязательные поля и отправить письмо без отдельного обработчика на PHP. Но одного вызова сниппета мало: если разметка формы, правила валидации и плейсхолдеры не совпадают, посетитель увидит пустую страницу или сообщение об успехе без письма. Ниже — практическая схема для FormIt 4.x; перед установкой сверьте совместимость конкретной версии пакета с вашей версией MODX.
Что подготовить до настройки
Понадобятся установленный FormIt, доступ к менеджеру MODX и возможность проверить отправку почты с сайта. Примеры используют синтаксис MODX Revolution и сниппет FormIt; это не готовая форма для MODX Cloud или стороннего конструктора.
- Проверьте версию MODX Revolution и установленную версию FormIt в менеджере пакетов.
- Убедитесь, что на сайте работает почтовая отправка. Если сомневаетесь, сначала проверьте её на тестовой странице или с администратором хостинга.
- Создайте ресурс, в который поместите форму. Для вызова FormIt используйте некешируемый тег:
[[!FormIt? ...]].
Некешируемый вызов — тег, который MODX обрабатывает при запросе страницы, а не сохраняет как готовый результат в кэше. Для формы это важно: обработка отправки должна запускаться при отправке данных.
Базовая форма: поля, проверка, письмо
Вызов ниже проверяет имя и email, затем передаёт данные почтовому обработчику. Замените адрес и текст темы на свои. Указанный адрес — пример, а не действующий контакт.
[[!FormIt?
&hooks=`email`
&emailTo=`YOUR_EMAIL@example.com`
&emailSubject=`Новая заявка с сайта`
&emailTpl=`formEmailTpl`
&validate=`name:required,email:required:email`
&validationErrorMessage=`Проверьте обязательные поля и формат email.`
&successMessage=`Заявка отправлена.`
]]
<form action="[[~[[*id]]]]" method="post">
<label>Имя
<input type="text" name="name" value="[[!+fi.name]]">
</label>
<label>Email
<input type="email" name="email" value="[[!+fi.email]]">
</label>
<button type="submit">Отправить</button>
</form>
<div>[[!+fi.validation_error_message]]</div>
<div>[[!+fi.successMessage]]</div>
В примере показана форма и вызов в одном фрагменте для наглядности. В рабочем шаблоне проверьте, как MODX обрабатывает HTML и теги сниппетов в вашей структуре чанков и ресурсов. Имена в name, правила валидации и плейсхолдеры должны совпадать: для поля email используются именно email и [[!+fi.email]].
Шаблон письма
Создайте чанк с именем formEmailTpl. FormIt подставит в него отправленные значения по именам полей.
<p>Новая заявка</p>
<p>Имя: [[+name]]</p>
<p>Email: [[+email]]</p>
Не добавляйте в письмо поля, которых нет в форме, и не считайте содержимое формы доверенным: пользователь может отправить запрос вручную, минуя интерфейс браузера. Если принимаете HTML или данные для последующей публикации, отдельно продумайте очистку и безопасный вывод.
Как проверить каждый этап
- Отправьте форму с пустыми полями. Должно появиться сообщение валидации, а письмо не должно уйти. Если форма молча очищается, проверьте вывод
[[!+fi.validation_error_message]]. - Введите некорректный email. FormIt должен отклонить значение по правилу
email:email. Атрибутtype="email"в HTML помогает браузеру, но сам по себе серверную проверку не заменяет. - Отправьте корректные данные. На странице должно появиться сообщение об успехе, а письмо — прийти на настроенный адрес. Проверьте также папку спама и журналы почтовой системы, если письма нет.
- Проверьте письмо на реальной заявке. Убедитесь, что в нём подставились имя и email, а не остались строки вида
[[+name]]. Если остались, проверьте имя чанка и совпадение названий полей.
Что обычно ломается
| Симптом | Что проверить |
|---|---|
| Форма показывает успех, письма нет | Настройки отправки почты MODX и хостинга, адрес получателя, папку спама, журналы отправки. |
| Ошибки не видны | Вывод плейсхолдера ошибок на странице и то, что вызов FormIt действительно обработал отправку. |
| В письме пустые значения | Совпадают ли имена атрибутов name с плейсхолдерами чанка. |
| Форма всегда показывает старый результат | Используется ли некешируемый вызов [[!FormIt? ...]] и не отдаёт ли страницу внешний кэш. |
| Валидация проходит не так, как ожидалось | Синтаксис правила в параметре validate, написание имени поля и версию FormIt. |
Сообщение об успехе означает, что обработчик FormIt завершил сценарий, но не доказывает доставку письма в почтовый ящик. Для заявок, которые нельзя терять, настройте отдельный контроль доставки и журналирование на уровне почтовой инфраструктуры.
Когда FormIt достаточно, а когда нужен другой путь
| Подход | Подходит, если | Цена решения |
|---|---|---|
| FormIt с email-хуком | Нужна обычная контактная форма с серверной проверкой и письмом. | Нужно разобраться в параметрах сниппета, чанках и настройках почты; сложную логику придётся проектировать отдельно. |
| FormIt с дополнительными хуками | После проверки нужно выполнить ещё одно действие, например сохранить данные или направить заявку дальше. | Понадобятся подходящие установленные дополнения или собственный код; совместимость проверяют для конкретных версий. |
| Собственный обработчик | Нужен нетипичный процесс, который трудно выразить настройками FormIt. | Вы отвечаете за обработку запроса, проверку, ошибки, безопасность и сопровождение кода. |
Проверка в браузере — это подсказка посетителю, а не защита формы. Решение о принятии данных должно приниматься на сервере.
Что делать дальше
Сначала добейтесь предсказуемой отправки одной простой формы: пустые поля отклоняются, корректные проходят, письмо содержит ожидаемые значения. Затем добавляйте по одному требованию — дополнительные поля, сохранение заявки, защиту от спама — и проверяйте его отдельно. Для каждой версии MODX и FormIt сверяйте доступные параметры и хуки с официальной документацией: названия и поведение дополнений могут зависеть от версии.
Если форма принимает персональные данные, до запуска решите, кто получит доступ к заявкам, где они будут храниться и как долго. Настройки почтовой доставки, защита от автоматических отправок и требования к обработке данных — отдельные задачи; базовый пример их не закрывает.
Редактор изображений: Убрать лишнее, заменить фон, добавить объект, расширить кадр — на вашем изображении.
Спросить за 20 ₽Источники: FormIt — документация MODX, MODX Revolution — официальная документация
Частые вопросы
Почему FormIt сообщает об успехе, но письмо не приходит?
Можно ли обойти проверку полей в браузере?
Почему в письме отображается [[+name]], а не имя?
Подойдёт ли этот пример для любой версии MODX и FormIt?
Нужно ли добавлять защиту от спама?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.