Красивая всплывающая форма обратной связи. Форма обратной связи в модальном окне

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

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

Именно о создании всплывающих форм пойдет речь. Я расскажу как это сделать на сайтах, где форма на html или сделана с помощью плагина Contact Form 7 на WordPress .

Создаем всплывающую форму на html .

Рассмотрим на примере формы обратного звонка. Ниже приведен пример формы, которая будет открываться по нажатию на кнопку «Заказать звонок» или «Вам перезвонить?».

Перезвонить

Чтобы форму открыть, её нужно сначала скрыть, мы это делаем указав в диве, который включает в себя форму, style=»display: none;» , таким образом форма скрыта. Также необходимо указать этому диву осмысленный id , т. к. в нашем случае используется форма для обратного звонка, то мы называем ее callback .

Создаем всплывающую форму в WordPress (Contact Form 7) .

Сразу нужно отметить, что если вы создавали формы на сайте без помощи плагина Contact Form 7 , то вам подойдет вариант описанный выше.

Итак, нам понядобятся 2 плагина: Contact Form 7 и Easy FancyBox , первый для создания форм, второй для открытия формы, установите их. Если нужная вам форма еще не создана, то создайте.
Нам нужен только её шорткод, который выглядит примерно так:

Теперь, если вы хотите сделать форму сквозной, то добавьте в футер этот код:

Естественно шорткод установите свой, его можно найти нажав, в левом меню, на Contact Form 7 , откроется страница со списком уже созданных форм.
А если вам нужна форма для конкретной страницы, то вставьте код через админку на странице (можно разместить код в виджете), только не в визуальном редакторе.

[Ваш шорт код]

Также установите свой шорткод.

Теперь нам нужно настроить плагин Easy FancyBox . Для этого переходим в его настройки. В левом меню открываем «Настройки» и нажимаем «Медиафайлы» (не путайте с вкладкой меню чуть выше, которая тоже называется «Медиафайлы»). Если, у вас на сайте уже установлен плагин для всплывающих фото, то уберите галочку Images , и поставьте Inline content . После чего сохраните изменения.

Осталось сделать кнопку, по нажатию на которою будет открываться форма. Её можно разместить в любом месте, в хидере, футере, можно прикрепить к одной из сторон браузера, так же можно разместить кнопку в любой статье или странице. Вставьте этот код, где хотели бы видеть кнопку:

Напишите нам

Кнопку и форму можете обверстать как вам понравится, придать любой стиль.

А на этом всё. Если статья вам понравилась, то расскажите о ней своим друзьям и коллегам, ставьте палец «Вверх» и подписывайтесь в группу (в левом сайдбаре), а я, за это, буду писать для вас еще более интересные статьи.

Здравствуйте, уважаемые читатели a! Однажды я уже писал о модальных окнах, то была статья . В этой статье покажу способ создания всплывающего окна на любом сайте. Использовать будем jQuery плагин fancybox . А чтобы добавить смысловой нагрузки статье, вставим в модальное окошко форму отправки письма. Сразу хочу заметить модальные окна на этом плагине работают на всех браузерах. Приступим!

Что нам понадобится?! не так уж и много:

  • библиотека jQuery;
  • плагин fancybox;
  • сценарий PHP для отправки сообщения.
Разметка

Скачать актуальную версию плагина Вы сможете по ссылке выше. Что касается плагина fancybox , очень хороший инструмент для создания окон на веб-сайте. В окна можно включать любое содержимое видео, изображения (как по одиночке так и галереей), текст, плавающие фреймы, плагин имеет кучу настроек (о них чуть ниже) + то что он работает одинаково корректно во всех браузерах, очень радует.

Разметку не стану усложнять, просто кликаем по ссылке и открывается окно с формой отправки сообщения:

Отправить сообщение

Где значение атрибута href совпадаем с идентификатором блока div в котором располагается форма отправки письма:

1
2
3
4
5
6
7
8
9
10
11
12
13


Отправка сообщения


Ваш E-mail



Введите сообщение

Отправить E-mail

Добавим на форму два поля это текст сообщения и электронный адрес отправителя, а также кнопку оправки. После того как пользователь введет e-mail, текст сообщения и нажмет отправить сначала проведем проверку корректности введенной информации затем с помощью ajax запроса отправим данные в PHP сценарий.

Изначально форма скрыта:

#inline { display : none ; }

Стили формы

Немного стилей для оформления полей формы и пара классов применяемых к полям при не корректном вводе данных. Когда ошибки исправлены стиль полей становится нормальным.:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

Txt {
display : inline-block ;
color : #676767 ;
width : 420px ;

margin-bottom : 10px ;

padding : 5px 9px ;
font-size : 1.2em ;
line-height : 1.4em ;
}

Txtarea {
display : block ;
resize : none ;
color : #676767 ;
font-family : Arial, Tahoma, sans-serif ;
margin-bottom : 10px ;
width : 500px ;
height : 150px ;
border : 1px dotted #ccc ;
padding : 5px 9px ;
font-size : 1.2em ;
line-height : 1.4em ;
}

Txt : focus ,
.txtarea : focus {
border-style : solid ;
border-color : #bababa ;
color : #444 ;
}

Input.error,
textarea.error {
border-color : #973d3d ;
border-style : solid ;
background : #f0bebe ;
color : #a35959 ;
}

Input.error : focus ,
textarea.error : focus {
border-color : #973d3d ;
color : #a35959 ;
}

Для оформления кнопки «Отправить» будем .:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

#send {
color : #dee5f0 ;
display : block ;
cursor : pointer ;
padding : 5px 11px ;
font-size : 1.2em ;
border : solid 1px #224983 ;
border-radius : 5px ;
background : #1e4c99 ;
background : -webkit-gradient(linear, left top , left bottom , from(#2f52b7 ) , to(#0e3a7d ) ) ;
background : -moz-linear-gradient(top , #2f52b7 , #0e3a7d ) ;
background : -webkit-linear-gradient(top , #2f52b7 , #0e3a7d ) ;
background : -o-linear-gradient(top , #2f52b7 , #0e3a7d ) ;
background : -ms-linear-gradient(top , #2f52b7 , #0e3a7d ) ;
background : linear-gradient(top , #2f52b7 , #0e3a7d ) ;
filter : progid: DXImageTransform.Microsoft .gradient(startColorstr= "#2f52b7" , endColorstr= "#0e3a7d" ) ;
}

#send : hover {
background : #183d80 ;
background : -webkit-gradient(linear, left top , left bottom , from(#284f9d ) , to(#0c2b6b ) ) ;
background : -moz-linear-gradient(top , #284f9d , #0c2b6b ) ;
background : -webkit-linear-gradient(top , #284f9d , #0c2b6b ) ;
background : -o-linear-gradient(top , #284f9d , #0c2b6b ) ;
background : -ms-linear-gradient(top , #284f9d , #0c2b6b ) ;
background : linear-gradient(top , #284f9d , #0c2b6b ) ;
filter : progid: DXImageTransform.Microsoft .gradient(startColorstr= "#284f9d" , endColorstr= "#0c2b6b" ) ;
}

#send : active {
color : #8c9dc0 ;
background : -webkit-gradient(linear, left top , left bottom , from(#0e387d ) , to(#2f55b7 ) ) ;
background : -moz-linear-gradient(top , #0e387d , #2f55b7 ) ;
background : -webkit-linear-gradient(top , #0e387d , #2f55b7 ) ;
background : -o-linear-gradient(top , #0e387d , #2f55b7 ) ;
background : -ms-linear-gradient(top , #0e387d , #2f55b7 ) ;
background : linear-gradient(top , #0e387d , #2f55b7 ) ;
filter : progid: DXImageTransform.Microsoft .gradient(startColorstr= "#0e387d" , endColorstr= "#2f55b7" ) ;
}

Fancybox

Переходим к самому интересному, к использованию плагина. Вызываем метод .fancybox в качестве селектора выступает класс ссылки:

$(document) .ready (function () {
$(".modalbox" ) .fancybox () ;
$("#contact" ) .submit (function () { return false ; } ) ;

Также отменяем стандартное действие формы submit (отправить), это позволит нам использовать свой собственный ajax запрос. При вызове метода я не использовал не одного параметра, оставил все значения по умолчанию. Однако о них стоит упомянуть:

Название Описание
padding Отступы до содержимого в окне (По-умолчанию 15px)
margin Расстояние от краев браузера до окна (По-умолчанию 20px)
width Ширина по умолчанию для «IFRAME» и «SWF» содержимого. Кроме того, для «inline», «AJAX» и «HTML» объектов если «AutoSize» устанавливается на «false». Может быть числовым или «Auto». (По-умолчанию 800px)
height Высота по умолчанию для «IFRAME» и «SWF» содержимого. Кроме того, для «inline», «AJAX» и «HTML» объектов если «AutoSize» устанавливается на «false». Может быть числовым или «Auto». (По-умолчанию 600px)
minWidth Минимальная ширина окна (По-умолчанию 100px)
minHeight Минимальная высота окна (По-умолчанию 100px)
maxWidth Максимальная ширина окна (По-умолчанию 9999px)
maxHeight Максимальная высота окна (По-умолчанию 9999px)
autoSize Если «true», то autoHeight и autoWidth также «true» (По-умолчанию true)
autoHeight Если установлен «true», для «inline», «AJAX» и «HTML» содержимого высота определяется автоматически (По-умолчанию false)
autoWidth Если установлен «true», для «inline», «AJAX» и «HTML» содержимого ширина определяется автоматически (По-умолчанию false)
autoResize Если установлено «true», то размер содержимого будет изменяться вместе с изменением окна
autoCenter Если установлено «true», то содержимое будет по центру
fitToView Если установлено «true», то окно будет подстроено под размер браузера перед открытием (По-умолчанию true)
aspectRatio Если установлено «true», то изменение размера ограничено соотношением сторон (По-умолчанию false)
topRatio Вертикальное позиционирование. Если установлено 0.5 то расстояние до верха и низа окна браузера будет одинаково. Если 0 то модальное окно будет сверху (По-умолчанию 0.5)
leftRatio Аналогичный параметр только для горизонтального позиционирования (По-умолчанию 0.5)
scrolling Показывать полосы прокрутки. Может быть установлено ‘auto’, ‘yes’, ‘no’ или ‘visible’ (По-умолчанию auto)
wrapCSS Настраиваемый класс CSS
arrows Если установлено «true», то будут отображаться навигационные кнопки (По-умолчанию true)
closeBtn Если установлено «true», то кнопка закрыть окно будет отображаться (По-умолчанию true)
closeClick Если «true», то при нажатии на содержимое окно закроется (По-умолчанию false)
nextClick Если установлено «true», то в галерее при нажатии на содержимое будет переход к следующей картинке (По-умолчанию false)
mouseWheel Если «true», то галерею можно прокручивать с помощью колесика мыши (По-умолчанию true)
autoPlay Если «true», то при открытии первого элемента галерее начнется слайдшоу (По-умолчанию false)
playSpeed Скорость слайдшоу (По-умолчанию 3000 миллисекунд)
preload Количество картинок миниатюр под основным изображением (По-умолчанию 3)
modal Если «true», навигация и кнопка закрытия будет отключена (По-умолчанию false)
loop Если «true», то в галерее после достижения конца, начнется заново (По-умолчанию true)
ajax Опция для ajax запроса
iframe Опция для управления iframe
swf Опция для управления swf содержимым
keys Можно определить клавиши для навигации по слайдшоу
direction Направление навигации
scrollOutside Если установлено «true», то сценарий будет избегать создания полос прокрутки (По-умолчанию true)
index Переопределяет индекс группы начала (По-умолчанию 0)
type Переопределяет тип содержимого. Поддерживаемые типы «image», «inline», «AJAX», «IFRAME», «SWF» и «HTML» (По-умолчанию null)
href Переопределяет ссылкой источник контента (По-умолчанию null)
content Переопределяет содержимое, которое будет отображаться (По-умолчанию null)
title Переопределяет заголовок, можно установить любой HTML (По-умолчанию null)
tpl Объект, содержащий различные шаблоны
openEffect /
closeEffect /
nextEffect /
prevEffect
Эффект анимации для действий, возможны значения ‘fade’, ‘fade’, ‘elastic’, ‘elastic’
openSpeed /
closeSpeed /
nextSpeed /
prevSpeed
Скорость анимации (По-умолчанию 250)
openEasing /
closeEasing /
nextEasing /
prevEasing
Easing метод для каждого типа перехода (По-умолчанию swing)
openOpacity/
closeOpacity
Если установлено «true», то меняется прозрачность (По-умолчанию true)
openMethod/
closeMethod/
nextMethod/
prevMethod
Эффект transition может принимать значения ‘zoomIn’ / ‘zoomOut’ / ‘changeIn’ / ‘changeOut’
parent Родительский элемент в контейнере. Это полезно для ASP.NET, где верхний элемент является «формой» (По-умолчанию body)

Пользоваться данными параметрами очень просто, допустим мы хотим уменьшить отступы до содержимого контента и высоту содержимого:

1
2
3
4

$(".modalbox" ) .fancybox ({
padding : 0 ,
height : 100
} ) ;

Отправка сообщения

Перед отправкой мы будем проверять правильность введенных данных, корректность введенного электронного адреса. Поэтому нам понадобится функция проверки. Использовать будем регулярное выражение:

1
2
3
4

function validateEmail(email) {
var reg = /^(([^()[\]\\.,;:\s@"]+(\.[^()[\]\\.,;:\s@"]+)*)|(".+"))@((\[{1,3}\.{1,3}\.{1,3}\.{1,3}\])|((+\.)+{2,}))$/ ;
return reg.test (email) ;
}

Последний шаг — это отправка сообщения. Отслеживаем событие клик по кнопке «Отправить»:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

$("#send" ) .on ("click" , function () {
var emailval = $("#email" ) .val () ;
var msgval = $("#msg" ) .val () ;
var msglen = msgval.length ;
var mailvalid = validateEmail(emailval) ;
// Проверка правильности электронного адреса
if (mailvalid == false ) {
$("#email" ) .addClass ("error" ) ;
}
else if (mailvalid == true ) {
$("#email" ) .removeClass ("error" ) ;
}
// Проверка длины сообщения
if (msglen < 4 ) {
$("#msg" ) .addClass ("error" ) ;
}
else if (msglen >= 4 ) {
$("#msg" ) .removeClass ("error" ) ;
}

Помещаем в первые две переменные данные, которые ввел пользователь. Определяем длину сообщения (msglen ) и проводим проверку введенного электронного адреса (mailvalid ). Далее проверяем если в переменная mailvalid равна false , значит электронный адрес введен неверно, и данный инпут будет подсвечен красным. Также проверяем количество введенных символов в текст сообщения, если меньше 4 символов значит показываем, что это ошибка (подсвечиваем текстовый инпут красным). $("#contact" ) .serialize () ,
success: function (data) {
if (data == "true" ) {
$("#contact" ) .fadeOut ("fast" , function () {
$(this ) .before ("Успешно! Ваше сообщение отправлено:)" ) ;
setTimeout("$.fancybox.close()" , 1000 ) ;
} ) ;
}
}
} ) ;
}
} ) ;

Если оба поля проверены то вместо кнопки «отправить» показываем текст, что происходит отправка сообщения. Это дает пользователю подтверждение того, что оба поля проверены и идет процесс.

Теперь запрос AJAX. Первый параметр запроса это тип передачи данных (POST или GET). Далее указываем файл обработчик (sendmessage.php ). Следующий параметр data (данные), методом serialize подготавливаем данные в формах для отправки на сервер.

Если мы получим хороший отклик от сервера (эти данные мы формируем в пхп файле), то мы скроем контактную форму и покажем сообщение об успехе отправки. Я использую SetTimeout() , для того чтобы модальное окно закрылось не сразу а через секунду после отправки данных.

PHP сценарий

Мы посылаем данные, введенные пользователем с помощью JQuery в sendmessage.php . В PHP мы формируем получаем эти данные из POST массива, формируем и отправляем сообщение. Если отправка прошла успешно возвращаем обратно в JQuery true иначе false .

В переменной $sendto мы указываем адрес электронной почты на который будут приходить письма.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

$sendto = "[email protected]" ;
$usermail = $_POST [ "email" ] ;
$content = nl2br ($_POST [ "msg" ] ) ;

// Формирование заголовка письма
$subject = "Новое сообщение" ;
$headers = "From: " . strip_tags ($usermail ) . "\r \n " ;
$headers .= "Reply-To: " . strip_tags ($usermail ) . "\r \n " ;
$headers .= "MIME-Version: 1.0\r \n " ;
$headers .= "Content-Type: text/html;charset=utf-8 \r \n " ;

// Формирование тела письма
$msg = "" ;
$msg .= "Новое сообщение\r \n " ;
$msg .= "

От кого: " . $usermail . "

\r \n " ;
$msg .= "

Сообщение: " . $content . "

\r \n " ;
$msg .= "" ;

// отправка сообщения
if (@ mail ($sendto , $subject , $msg , $headers ) ) {
echo "true" ;
} else {
echo "false" ;
}

В этой статье научу как делается на wordpress форма обратной связи тремя видами. Давно не писал на технические темы, потянуло. Давайте разберем какие бывают способы и как их осуществить.

Это очень хороший инструмент для блоггера, добавляет к функционалу вордпресса не только комментировать, но и давать обратную связь посредством электронной почты. Моя форма обратной связи находится . Как ее сделать опишу тремя способами:

  • Кодом, для продвинутых.
  • Плагином.
  • С помощью сервиса.
  • Всплывающая обратная связь
  • WordPress форма обратной связи с помощью кода без плагина

    Разрабатываться wordpress форма обратной связи будет в шаблоне страниц. За вывод отвечает файл page.php в папке темы.

    Предупреждаю сразу, шаблоны разные у всех, поэтому вывод страниц может осуществляться посредством другого файла.

    Находится в папке с вашей активной темой, надо открыть его в любом редакторе, буду показывать наглядно здесь. Для начала покажу содержимое своего page.php.

    Страница: ()

    В самый верх данного кода помещаем вот такой набор команд.

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

    Взамен вставляем эти команды.

    Спасибо, ваше сообщение отправлено. Извините, произошла ошибка. » следующий код:

    add_filter("widget_text", "do_shortcode");

    add_filter ("widget_text" , "do_shortcode" ) ;

    Он даст возможность выполнять все шорткоды в сайдбаре.

    У меня получилась вот такая симпатичная всплывающая форма:

    Несколько разных всплывающих форм на одной странице

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

    Например, одна кнопка у вас ведет на форму с именем и телефоном и служит для заказа обратного звонка с сайта, а вторая должна открывать другую форм где идет подробная заявка на заказ (с адресом, полем для описания, возможностью прикрепить файл и т.д.). В самом плагине Contact Form 7 вы можете сделать бесконечное количество вариантов форм, но как их впихнуть в разные кнопки одной страницы?

    Для этого необходимо корректировать код кнопки из предыдущего пункта. Первая кнопка использует представленный выше вариант. Во второй меняются два значения.

    Всем привет. Засыпали вопросами о том, как реализовать форму, которая появляется в модальном окне после нажатия на кнопку, а после отправки, выводилось бы сообщение об успехе или провале.

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

    Некоторые утверждают, что это из-за того, что у людей потихоньку «вырабатывается иммунитет» и открытая форма — это агрессивная продажа. Якобы сейчас настало то время, когда пользователь при виде открытой формы считает, что ему пытаются что-то «впарить». Не совсем согласен с этой теорией, но зерно истины — присутствует. Может быть в некоторых видах бизнеса это и так. Ну а сейчас давайте займемся реализацией формы.

    Примечание! Я не буду подробно описывать каждое действие, а предлагаю вам готовый вариант в исходнике. Если возникнут вопросы — пишите в комментариях. Будем разбираться:)

    Сегодня начнем не с jQuery, а с верстки кнопки и формы. Все скрипты подключим в конце страницы.

    Кнопка, по нажатию на которую будет открываться модальное окно:

    Оставить заявку

    Класс можете задать любой, а вот в href напишите #modal — это будет id у контейнера с затенением и контактной формой.

    Теперь приведу код формы и блока, на котором будет располагаться форма:

    Оставьте ваши контактные данные и наш консультант свяжется с вами Хочу такую форму на свой сайт

    Добавив стили, выглядеть это стало так:


    Для создания модального окна, использовалась библиотека Remodal. Это набор из css и js файлов, как раз для создания анимированных модальных окон. Можете скачать по ссылке или уже с моими правками в конце статьи.

    Между тегами head подключаем стили:

    А перед закрывающимся тегом body — добавляем скрипты:

    Script.js — это скрипт для обработки формы. Тот самый Ajax, который позволяет нам осуществить всю процедуру без перезагрузки страницы:

    $(document).ready(function () { $("form").submit(function () { // Получение ID формы var formID = $(this).attr("id"); // Добавление решётки к имени ID var formNm = $("#" + formID); $.ajax({ type: "POST", url: "mail.php", data: formNm.serialize(), success: function (data) { // Вывод текста результата отправки $(formNm).html(data); }, error: function (jqXHR, text, error) { // Вывод текста ошибки отправки $(formNm).html(error); } }); return false; }); });

    Не буду приводить исходный код css и js из файлов, отвечающих за модальное окно и форму, так как они достаточно объемы. Если что, смотрите в исходнике. А вот php обработчик во многом стандартный (если можно так сказать):

    Пожалуйста , не забывайте менять адреса электронной почты на свои.

    Вот такая ajax форма получилась. Извините, что не пытался объяснить подробно, как делался каждый элемент. Просто хотелось дать готовый результат, а описывать все анимации, появления — нет никакого смысла. Качайте исходник и внедряйте на свой сайт. А на сегодня — все. Всем удачи!

    Ребята, настоятельно прошу тестировать форму на реальном или виртуальном сервере (хостинге). Убедитесь пожалуйста, что ваш сервер поддерживает php, у вас платный тариф и не тестовый период. В противном случае, в 90% случаев форма работать не будет.

    Не ждите письма у себя в почтовом ящике, если вы просто открыли индексный файл в браузере и нажали кнопку «Отправить». Php — это серверный язык!

    Если вам лень разбираться и самостоятельно делать форму, то рекомендую обратить внимание на .

    Обновленная версия статьи находится