Drupal 7 для начинающих: Форма обратной связи.

Добавляем форму обратной связи.

27.02.2013
25 комментариев
4 мин.

На тестовом сайте мы сделали почти весь запланированный фукнционал, и затронули все основные возможности Drupal'a, и даже чутка сверху.

У нас осталось одна очень важная для сайтов деталь — форма обратной связи (контакты). По сути, это можно сделать включив модуль contact из стандартнйо поставки Drupal, но он очень слабенький. Там всего несколько полей и по сути ничего сделать нельзя.

Для этого лучше использовать модуль webform. Он очень распространен, и это не безосновательно. Как я уже написал, стандартная контактная форма почти никуда не годиться, поэтому все используют данный модуль, который позволяет делать неограниченное количество различных форм (не только для контактов), которые могут иметь нужные вам поля (по принципу создания своего типа содержимого), делать рассылку на разные почтовые адреса и генерировать отсылаемый результат, также позволяет хранить результаты формы на сайте и ограничивать доступ к определенным формам.

Итак, установите данный модуль, и было бы неплохо его русифицировать. После установки у вас должен появится новый тип материала Webform (node/add). Поэтому жмем «Добавить содержимое» и создаем новый Webform.

У вас откроется страница добавления webform на которой предложено ввести заголовок и содержимое (оно будет над формой). Давай введем следующие данные:

Добавление материала.

Прокручиваем страницу до настроек отображения и ставим собственный алиск (ЧПУ / параметры адреса).

Параметры адреса.

Как вы видите, я выключил автоматическую генерацию, чтобы при сохранении он не создал синоним на основе макетов из pathauto, и если вы делаете какое-то обновление в форме, не стоит забывать отключать галочку, так как она автоматически включается каждый раз.

Также я указал синоним contact — будьте внимательны, он является системным синонимом для формы контактов от одноименного модуля (о котором говорится в начале статьи). Поэтому убедитесь что модуль contact выключен. После чего смело жмем кнопку «Сохранить».

Перед вами откроется страница создания формы контактов. Тут необходимо добавлять поля, которые будут присутствовать в форме, тоесть те, которые вам надо.

Я буду описывать как я делаю свою почтовую форму, вы же можете по анологии делать свою.

Для начала добавим поле где опльзователь сможет указать свой E-Mail адрес. Для этого вводим следующие данные:

  • Метка: E-Mail
  • Тип: E-mail // Данный тип поля добавлен непосредственно данным модулем. Он автоматически проводит проверку на валидность email адреса.

И жмем «Добавить».

Добавление полей webform.

Как и с полями для типа содержимого, у нас открывается второй этап настройки поля. Разумеется, у каждого поля настройки свои. Но есть те, которые присущи каждому полю и только в пределах webform:

  • Основные

  • Метка — она выводится в форме над полем. Хоть это и стандартно, я написал чтобы вы не путали её с машинным именем.

  • Field Key — это ключевое имя, необходимое для идентификации поля и подстановки его как переменной в шаблон письма. Данное машинное имя действует в пределах формы. Тоесть, если вы решили создать еще одну форму, там тоже может быть поле с таким ключем.

  • Validation

  • Mandatory — делает поле обязательным для заполнения

  • Unique - в пределах формы это должно быть уникальным значением. Некая защита когда во все поля вводят одно и тоже.

  • Показать (также могуть быть и другие значения)

  • Ширина — ширина поля.

  • Label display — где будет и будет ли отображаться метка поля.

  • Отключено — данное поле выключено.

  • Private — делает данное поле видимым только тем пользователям, у которых есть права на просмотр результатов.

Нам необходимо заполнить описание (на свое усмотрение), установить галочку Mandotary, Unique и сохранить. Наше поле добавиться автоматически. Таким же способом добавьте нужные вам поля. (я добавил приложение типа файл и текст сообщения типа textarea)

После того как вы добавили нужные вам поля, нам необходимо донастроить форму. Для этого вверху есть 3 вкладки.

Вкладки webform.

Переходим на вкладку «Электронные адреса». Вы увдите страницу с настройками электронных адресов. В них указывается куда и какая информация будет отсылаться после отправки формы.

Для начала добавим свой почтовый ящик, тем самым убрав необходимость постоянно заходить на сайт и проверять наличие писем. Для этого в поле Addess вводите свой E-Mail адрес и жмете «Добавить». Вы можете указать несколько адресов, разделяя их запятой.

Почта для получения писем.

После добавления вы попадете на настройку писем.

  • E-Mail header tetails. Базовая информация о письме.
  • E-Mail sibject — заголовок письма.
  • E-Mail from address — адрес почты с которого (якобы) отправлено письмо. Вы можете подставить адрес указанный пользователем, чтобы при нажатии на ответ письмо было адресовано ему. Также вы можете указать произвольную почту, чтобы фильтровать письма по данному адресу.
  • E-Mail from name — от чьего имени письмо.

E-Mail template позволяет настроить содержимое письма. Вы можете использовать TOKEN VALUES — различная информация с сайта, либо INCLUDED E_MAIL VALUES, в которых содержатся значения из формы.

Я его заполнил так:

Шаблон письма.

Для подстановки используеются подстановочные шаблоны: %email[field_key]. Используйте их для вставки данных отдельно. Если нужно вставить все без особой нужды в оформлении то используется %email_values.

Теперь переходим в третью вкладку Form settings. В ней можно настроить данную форму еще точнее.

  • Confirmation message — сообщение на странице, которое увидет пользователь после отправки формы.
  • Redirection location — куда будет перенаправлен пользователь после отправки формы.
  • Total submissions limit — ограничение на количество писем вообще, в день, месяц и т. д. Тоесть при достижении этого количества, форма будет блокироваться.
  • Per user submission limit — как и выше, но только для конкретного пользователя.
  • Status of this form — доступна форма или нет.
  • Submission access — у кого есть доступ к почте.
  • Расширенные настройки — более детальная настройка формы.
  • Available as block — форма будет доступна также в списке блоков, соответственно вы сможете размещать её на нужных вам страницах.
  • Show complete form in teaser — если вы где-то показываете все формы, то в кратком содержании будет отображаться форма, иначе только на основной странице.
  • Show «Save draft» button — добавляет кнопку сохранения текущих параметров. Это значит что пользователь может сохранить, закрыть сайт, а потом вернуться и продолжить заполнять.
  • Automatically save as draft between pages — принудительно сохраняет значения.
  • Show the notification about previous submissions — показывает то что пользователь уже отсылал письма.
  • Название кнопки для добавления информации — что будет на кнопке которая служит для отправки почты. Напишите «Отправить», иначе будет на англ. Языке.

Сохраняйте и смотрите что получилось, для этого переходим по адресу site/contact (или тот алиас который вы указали).

Готовая форма.

Самое время проверить форму. Для этого заполните нужные поля и нажмитке кнопку «Отправить». После чего письмо будет доставлено на ту почту(ы), которую вы указали на вкладке «Электронные адреса». Вы также можете посмотреть результаты на сайте. Достаточно зайти на страницу формы и нажать «Результаты».

Результат на сайте.
Прикрепленные файлы
Результат выполнения — dfbeginners.tar.gz, 7.91 МБ
Drupal
Drupal 7
Webform

Комментарии

Niklan   чт, 23/05/2013 - 11:18

Эм... нет, нету. Чего-то я действительно намудрил там :) Спасибо, скрин исправлю.

Сергей   ср, 28/08/2013 - 01:24

Скажите пожалуйста, как русифицировать этот модуль? Какие файлы править? Спасибо!

Татьяна   вт, 01/10/2013 - 13:46

Здравствуйте!
Можно ли сделать так, чтобы Submission information не отображалась на сайте по каждому обращению пользователей?

Алекс   ср, 23/10/2013 - 11:26

Слабенькая эта статья. Лучше б рассказал молодым как перерендэрить форму модуля Contact со своими дополнительными полями.

Дмитрий   пт, 22/11/2013 - 18:35

Спасибо Вам за статью! Я программер с 10летним стажем, но в другой области, поэтому дрюпал приходится осваивать как школьнику по шагам. Из всех найденных статей Ваша помогла больше всего. По себе знаю, что имея за плечами большой опыт, оч сложно объяснить что-то новичкам.

Тарас   чт, 13/02/2014 - 13:33

Если можно вопрос...

Веб-форма у меня блоком идёт (невидимым), есть кнопка при нажати на которую открывается эта веб-форма колорбоксом, в веб-форме есть поле тема сообщения (ну и типа само сообщение, и-мэил и т.д.)

И, собственно, вопрос

Как сделать чтоб в поле тема сообщения автоматически подтягивался тайтл страницы?

Niklan   чт, 13/02/2014 - 14:00

jQuery же. Совсем небольшой код будет.

Берем содержимое тега <title> а затем вставляем в инпут.
 

unfalse   вт, 11/03/2014 - 19:08

Наверняка через такие формы спам хорошо шлют. Хорошо бы ещё капчу прикрутить.

Niklan   вт, 11/03/2014 - 19:13

Прикрутите Honeypot и забудьте о спаме а пользователи не будут пугаться капчи)
 

yury   сб, 19/07/2014 - 13:13

Странно - создал все поля, сохранил, они вообще не отображаются на странице формы. Отображается только заголовок и содержимое.

Maks   пт, 29/08/2014 - 08:59

Привет.
А как сделать, чтобы в случае если пользователь авторизован, поле Email заполнялось из профиля пользователя?

Maks   пт, 29/08/2014 - 09:14

Если банально, то в настройках формы...

Но вот интересно, а как-то программно это можно сделать?

Niklan   пт, 29/08/2014 - 09:39

Привет.

Самый простой и верный вариант альтернуть форму.
hook_form_alter() и\или  hook_form_FORM_ID_alter() затем просто проверяем, анонимный ли пользователь user_is_anonymous() если нет, то

global $user;
$user->mail - тут будет адрес, его надо подставить в поле формы как #default_value;

Maks   пт, 29/08/2014 - 14:12

Вот в чем дело, а я пытался подставить как value ...

Спасибо

Рустам   сб, 01/11/2014 - 12:46

а почему у меня не отрабатывает %email[] в письме приходит просто токен, без содержания информации

Гость   ср, 06/01/2016 - 09:53

очень непонятно описано для новичков, пиши подробнее со скриншотами и поменьше сложных слов - это там, как у вас, как бы так ... путаница

Denis   чт, 19/05/2016 - 09:11

А я где то в настройках закрыл форму и теперь пишет "Данную форму нельзя отправить." И забыл где...

Гость   ср, 29/06/2016 - 17:14

Не включается на Drupal 7.44

Enables the creation of forms and questionnaires.
Зависит от Ctools (отсутствует), Views (отсутствует)

Дмитрий   чт, 30/06/2016 - 18:19

Можно ли сделать 2 формы обратной связи с разными полями для заполнением?

Денис   вт, 05/09/2017 - 12:07

WebForm неплохое решение, когда-то пользовался. Но пришлось на uCalc создавать формы, так как понадобились чуть более сложные формы, с расчетами.

Leha   ср, 22/11/2017 - 11:09

Подскажите пожалуйста, как после сабмита формы просто очищать поля, а не скрывать всю форму (выведена блоком)

Никола   вт, 28/05/2019 - 13:07

Хорошая статья, понятно все расписано. WebForm хорошая штука, формы любые можно накидывать. Мне вот недавно тоже расчеты понадобились, решил что-нибудь иное попробовать, остановился на stepform.io/ru там формулы разные можно настроить и подсказки есть.