#Формы
Решение form. Даёт конструктор форм и хранилище заявок.
#Что приносит на сайт
| Справочник | Что в нём | В меню |
|---|---|---|
| Формы | сами формы | да |
| Поля форм | поля каждой формы | нет — правятся в карточке формы |
| Заявки | всё, что отправили посетители | да |
| Виды полей формы | перечень типов | нет |
Плюс модуль form_block — им форма выводится на страницу.
#Создать форму
Формы → Создать запись.
| Поле | Что задаёт |
|---|---|
| Название | для себя: «Заявка на замер» |
| Код | им форму зовут: zamer |
| Надпись на кнопке | «Отправить», «Записаться» |
| Что показать после отправки | текст благодарности |
| Действия после отправки | см. ниже |
| Включена | выключенная не принимает заявки |

#Поля формы
Правятся прямо в карточке формы — уходить в отдельный справочник не нужно.
| Настройка | Что задаёт |
|---|---|
| Код поля | имя в данных заявки: phone |
| Подпись | что видит посетитель: «Ваш телефон» |
| Вид поля | строка, телефон, список, файл… |
| Подсказка | серый текст внутри поля |
| Значение по умолчанию | заранее заполненное |
| Обязательное | без него не отправить |
| Порядок | сверху вниз |
Доступные виды полей:
Строка · Многострочное поле · Почта · Телефон · Число
Список · Список с выбором нескольких · Флажки · Переключатели
Дата · Дата и время · Файл · Скрытое поле#Вывести форму на страницу
{module.form_block:code=zamer}Разметку полей дописывает само решение — перечислить их в вёрстке заранее нельзя, потому что их заводит человек.
#Действия после отправки
Поле «Действия после отправки» — по строке на действие:
save
email: office@example.ru, manager@example.ru
telegram| Действие | Что делает |
|---|---|
save | ничего — заявка сохраняется в любом случае |
email: адрес | письмо; несколько адресов через запятую |
telegram | сообщение в Telegram сайта |
crm | завести заявку в CRM — появляется с решением crm-form |
Строка, начинающаяся с #, считается примечанием.
Заявка сохраняется в базе первой, до всех действий, и независимо от них. Почта может не уйти, Telegram — не ответить, но заявка останется в разделе «Заявки». Это главное свойство решения: заявки не теряются при сбоях внешних служб.
Поэтому строка save ничего не делает — она оставлена ради полноты
списка. Убрав её, вы заявок не потеряете. Единственный случай, когда
посетителю честно говорят «не получилось», — это когда не удалось
записать в базу.
Что именно отработало, видно в самой заявке — поле «Что отработало»:
save: заявка сохранена
email: отправлено
telegram: не отправлено#Почта и Telegram
Адрес получателя задаётся в самой форме. А вот как отправлять — общая настройка сайта: Настройки → Настройки API.
Токен Telegram-бота хранится один на сайт, а не в каждой форме. Иначе смена бота означала бы правку всех форм, а токен лежал бы в стольких местах, сколько форм на сайте.
#Вложения
Поле типа «Файл» принимает до 20 МБ на файл. Файлы кладутся в отдельный
угол — /uploads/forms/, — а не в общую библиотеку картинок сайта.
Не приняли файл — заявка всё равно уходит, а в поле остаётся пометка о причине. Потерять текст заявки из-за слишком большого приложения было бы хуже, чем потерять приложение.
#Защита от спама
Работает сама, настраивать нечего. Подделкой считается заявка, если:
- заполнено скрытое поле-ловушка — его видят только те, кто читает разметку и заполняет всё подряд;
- форма отправлена быстрее, чем её можно прочитать;
- с одного адреса приходит слишком часто;
- почта не похожа на почту, телефон — на телефон;
- в имени или названии компании есть ссылки.
Ни капчи, ни «докажите, что вы человек» здесь нет намеренно. Заявку оставляет человек, которому что-то нужно; лишний шаг на этом месте стоит дороже, чем разбор десятка подделок. Все проверки незаметны тому, кто заполняет форму честно.
Чтобы защита работала, в вёрстке формы должна стоять метка
{formguard} — решение ставит её само, а в своей вёрстке её нужно
поставить руками.
#Повторная отправка
Точно такая же заявка, отправленная в течение 10 минут, вторично не заводится: посетитель нажал «Отправить» дважды, а не оставил две заявки.
#Что чаще всего идёт не так
«Форма не выводится». Проверьте код в вызове:
{module.form_block:code=zamer} — код формы, а не её название.
«Заявки приходят, письма нет». Смотрите поле «Что отработало» в
заявке. email: не отправлено — разбираться с настройками почты в
«Настройки API»; строки email вовсе нет — действие не прописано в
форме.
«Telegram молчит». Проверьте, заполнена ли интеграция Telegram в
настройках сайта, и есть ли строка telegram в действиях формы.
«Заявка не сохранилась». Такого почти не бывает: сохранение идёт первым и не зависит от остальных действий. Проверьте, включена ли форма.