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

27.02.2013

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Основные

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

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

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

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

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

  • Label display — где будет и будет ли отображаться метка поля.
  • Отключено — данное поле выключено.
  • Private — делает данное поле видимым только тем пользователям, у которых есть права на просмотр результатов.

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

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

Вкладки webform.
Вкладки 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 (или тот алиас который вы указали).

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

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

Результат на сайте.
Результат на сайте.

Прикрепленные файлы

Комментарии

S
Stan
23.05.2013

Разве у модуля есть поддержка отправки HTML-писем?

N
Niklan
23.05.2013

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

С
Сергей
28.08.2013

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

Т
Татьяна
01.10.2013

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

А
Алекс
23.10.2013

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

Д
Дмитрий
22.11.2013

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

Т
Тарас
13.02.2014

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

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

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

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

N
Niklan
13.02.2014

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

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

u
unfalse
11.03.2014

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

N
Niklan
11.03.2014

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

y
yury
19.07.2014

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

M
Maks
29.08.2014

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

M
Maks
29.08.2014

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

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

N
Niklan
29.08.2014

Привет.

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

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

M
Maks
29.08.2014

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

Спасибо

Р
Рустам
01.11.2014

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

u
ultexplorer
24.11.2014

Здравствуйте.
Создал форму в блоке.
Но когда второй раз отсылаю, то получаю сообщение:
*The value ultexplorer@gmail.com has already been submitted once for the E-Mail field. You may have already submitted this form, or you need to use a different value.
*The value Игорь has already been submitted once for the Имя field. You may have already submitted this form, or you need to use a different value.

То есть форма не дает возможность отослать себя одному пользователю только один раз. Я смотрел настройки, но не нашел, где это можно поправить.
В чем ошибка и как исправить работу формы?

Г
Гость
06.01.2016

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

D
Denis
19.05.2016

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

Г
Гость
29.06.2016

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

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

Д
Дмитрий
30.06.2016

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

Д
Денис
05.09.2017

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

Содержимое данного поля является приватным и не предназначено для показа.