Иногда с помощью формы требуется передать некоторые промежуточные данные, которые не редактируются пользователем. Например артикул товара, чтобы менеджеры точно знали, что выбрал клиент. Или посчитать цену с учетом параметров. Так, при выборе дивана пользователь выбирает цвет и материал, и после отправки заявки в ней уже содержится итоговая цена с учетом этих параметров. Обычные поля для этого не подходят, да и такое решение небезопасно, так как данные не зашифрованы и будут видны пользователю.
Для таких задач мы добавили в конструктор скрытое поле. Оно не отображается на странице с формой. Посетитель не может в нем ничего напечатать. Через это поле можно передавать данные в CRM, на почту или от страницы к странице без ведома пользователя. Настраивать его смогут те, кто знает html и javascript, чтобы правильно обращаться к элементам и прописывать сценарии получения данных.
Рассказываем, где это пригодится и как передать в него значения.
Зачем это нужно
В скрытом поле можно сохранять:
- текущее состояние квизов;
- cookie-файлы;
- неизменяемые данные (например, время загрузки формы);
- IP-адреса пользователей, заполнивших форму. Это особенно полезно в борьбе со спамом. Отслеживая IP-адреса, можно увидеть, с какого из них идет спам, и заблокировать его через хостинг или плагин безопасности;
- параметры, которые не будут видны на форме, но будут приходить на почту или CRM. Можно установить примечание и задать для него условие, что при выборе определенного варианта отображать в письме значение из поля, в противном случае отправлять письмо без значения. Это удобно, например, при выборе товара, который оформляют только под заказ и с доплатой;
- данные с сайта: название товара, его артикул, цену.
Важно отметить, что информацию скрытого поля нельзя назвать полностью скрытой. Она не отображается в интерфейсе, но ее легко просмотреть в исходном коде страницы через браузер. Поэтому не рекомендуется хранить в нем пароли или другие конфиденциальные данные.
Как это использовать
Для примера возьмем форму заявки на сайте. На странице каталога в карточке каждого товара есть кнопка Оставить заявку.
Код для карточек выглядит так:
<div class="container">
<!-- Карточка товара 1 -->
<div class="product-card">
<img src="https://avatars.mds.yandex.net/get-autoru-vos/2023939/76ec60f77c2e552e5b63419b721e8f02/1200x900" alt="Toyota Avalon">
<h3>Toyota Avalon XLE 2022</h3>
<p>3 999 000 ₽</p>
<button class="order-button" data-title="Toyota Avalon XLE 2022" data-price="3 999 000 ₽">Оставить заявку</button>
</div>
<!-- Карточка товара 2 -->
<div class="product-card">
<img src="https://avatars.mds.yandex.net/get-verba/1604130/2a00000173c95853237eabcd8b65bc7a3afb/1200x900" alt="Toyota Hilux">
<h3>Toyota Hilux 2022</h3>
<p>5 999 000 ₽</p>
<button class="order-button" data-title="Toyota Hilux 2022" data-price="5 999 000 ₽">Оставить заявку</button>
</div>
<!-- Карточка товара 3 -->
<div class="product-card">
<img src="https://avtopilot-market.ru/upload/iblock/34e/chekhly_avtopilot_na_sidenya_toyota_land_cruiser_300_elegance_5_mest_s_2021_g_v_bez_podushek_bezopas.jpg" alt="Toyota Land Cruiser">
<h3>Toyota Land Cruiser 2023</h3>
<p>13 899 000 ₽</p>
<button class="order-button" data-title="Toyota Land Cruiser 2023" data-price="13 899 000 ₽">Оставить заявку</button>
</div>
</div> <!-- END container -->
Внутри каждой кнопки разместим атрибуты, к которым будем обращаться, брать значения и передавать в скрытые поля. В нашем случае data-title и data-price содержат название и цену соответствующего товара.
Оформить элементы каждый может под себя. Нет необходимости подробно описывать css.
Далее код для модального окна выносим отдельно после карточек. Оно будет единым и вызываться по клику на кнопку:
<!-- Модальное окно -->
<div class="modal-overlay" id="myModal">
<div class="modal-content">
</div>
</div>
Теперь требуется обеспечить, чтобы в CRM и на почту попадала не просто заявка с данными клиента, а еще название и цена выбранного товара.
Добьемся этого таким образом:
- Для начала создадим форму на QForm с полями: «Имя», «Телефон»
- Далее разместим одно «Скрытое поле» для названия товара и укажем имя в панели «Для разработчиков» (например, «product_name»), а другое для цены и укажем имя (например, «product_price»)
- После этого код созданной формы поместим внутри модального окна:
<!-- Модальное окно -->
<div class="modal-overlay" id="myModal">
<div class="modal-content">
<!-- Форма заявки -->
<div data-formid="form_L3zIBWiySiqM6KwrUbBh2Gre-oWe7gqK"></div>
</div>
</div>
Когда все приготовления завершены, приступим к написанию обработчика внутри тега <script>.
Код выглядит так:
// Получаем все кнопки "Оставить заявку"
let orderButtons = document.querySelectorAll('.order-button');
// Получаем модальное окно
let modal = document.getElementById('myModal');
// Добавляем обработчик события на каждую кнопку "Оставить заявку"
orderButtons.forEach(function(button) {
button.addEventListener('click', function() {
// Открываем модальное окно плавно
modal.classList.add('modal-show');
// Получаем данные о товаре из data-атрибутов кнопки
let title = button.getAttribute('data-title');
let price = button.getAttribute('data-price');
// Получаем элементы скрытых полей
hidden_field_name = document.querySelector("[name=product_name]");
hidden_field_price = document.querySelector("[name=product_price]");
// Добавляем данные в скрытые поля
hidden_field_name.value = title;
hidden_field_price.value = price;
});
});
// Закрываем модальное окно при клике вне его области
modal.addEventListener('click', function(event) {
if (event.target === modal) {
modal.classList.remove('modal-show');
}
});
Работает это так:
Клик по кнопке с классом «.order-button» запускает функцию, которая находит и получает данные из data-атрибутов кнопки. Это сохраняется в переменные. А затем выбираются элементы скрытого поля («product_name» и «product_price»), в которые передаются эти переменные.
Теперь после отправки формы в личном кабинете на странице заявки помимо основных данных будет отображаться информация со скрытых полей.
О том, как настроить отправку на почту читайте тут.
Полученные значения можно обработать по-разному перед тем, как они отправятся дальше. Например, рассчитать стоимость кухонного гарнитура, используя квиз. В каждый шаг добавляется скрытое поле, которое перехватывает выбранное значение, внутри функции делает расчеты и на выходе отдает уже готовые цифры. Это сэкономит время и облегчит работу сотрудников, ведь они смогут почти моментально показать клиенту итоговую цену.
Используйте скрытое поле для улучшения обратной связи.