Как добавить форму обратной связи на сайт

Пример формы обратной связи

Как добавить такую форму на свой сайт

  1. Откройте приложение «Сайт» и перейдите в раздел «Блоки».
  2. Выберите блок с названием «site.send_email_form».
  3. Щелкните по фрагменту кода под надписью «Встроить на страницу или в шаблон».
  4. Скопируйте выделенный фрагмент кода и вставьте его в HTML-код любой страницы или шаблон темы дизайна.

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

Сообщения, которые посетители сайта оставляют через форму обратной связи, отправляются на email-адрес, указанный в поле «Email-адрес для уведомлений» в приложении «Настройки».

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

Если вы не хотите изменять содержимое этого поля, то можно указать адрес получателя сообщений обратной связи в исходном коде блока «site.send_email_form». Для этого добавьте нужный email-адрес внутри кавычек, как показано ниже:

$wa->sendEmail("admin@mycompany.ru", $errors)

Можно указать и несколько адресов получателей:

Простой формат (только адреса)

{$wa->sendEmail(['address1@domain.ru', 'address2@domain.ru'], $errors)}

Расширенный формат (адреса получателей с их именами)

{$wa->sendEmail(['address1@domain.ru' => 'Имя1', 'address2@domain.ru' => 'Имя2'], $errors)}

Как убрать поле для ввода защитного кода (капчи)

Для защиты от автоматически добавляемых сообщений (спама) в форме обратной связи используется поле для ввода защитного кода (капчи).

Если вы считаете, что необходимость вводить защитный код мешает посетителям вашего сайта отправлять сообщения, то отключите это поле. Для этого перед строкой с вызовом метода {$wa->sendEmail(...)} добавьте следующее:

{$wa->storage(['captcha', $wa->app()], '')}

Таким образом вы «говорите» фреймворку Webasyst, что правильной капчей является пустая, т. е. сообщение отправится, если ничего не написать в поле для ввода защитного кода.

Теперь осталось убрать поле для ввода защитного кода, чтобы оно не вводило в заблуждение посетителей сайта. Для этого удалите из исходного кода блока «site.send_email_form» следующий фрагмент:

<div class="wa-field">
    <div class="wa-value">
        {$wa->captcha(!empty($errors.captcha))}
        {if !empty($errors.captcha)}<em class="wa-error-msg">{$errors.captcha}</em>{/if}
    </div>
</div>


10 комментариев

  • +1
    Соболев Григорий Соболев Григорий 14 ноября 2023 11:36 #

    Добрый день.

    Куда нужно вставить {$wa->block("site.send_email_form")}

    в форму :

    <?php
    if ($_POST) { // если передан массив POST
    $name = htmlspecialchars($_POST["name_"]); // пишем данные в переменные и экранируем спецсимволы
    $tel = htmlspecialchars($_POST["tel_"]);
    $email = htmlspecialchars($_POST["email_"]);
    $subject = htmlspecialchars($_POST["task_"]);
    $message = htmlspecialchars($_POST["message_"]);
    $json = array(); // подготовим массив ответа
    if (!$name or !$tel or !$email or !$subject or !$message) { // если хоть одно поле оказалось пустым
    $json['error'] = 'Вы заполнили не все поля!'; // пишем ошибку в массив
    echo json_encode($json); // выводим массив ответа
    die(); // умираем
    }
    if(!preg_match("|^[-0-9a-z_\.]+@[-0-9a-z_^\.]+\.[a-z]{2,6}$|i", $email)) { // проверим email на валидность
    $json['error'] = 'Не верный формат email! >_<'; // пишем ошибку в массив
    echo json_encode($json); // выводим массив ответа
    die(); // умираем
    }
    function mime_header_encode($str, $data_charset, $send_charset) { // функция преобразования заголовков в верную кодировку
    if($data_charset != $send_charset)
    $str=iconv($data_charset,$send_charset.'//IGNORE',$str);
    return ('=?'.$send_charset.'?B?'.base64_encode($str).'?=');
    }
    /* супер класс для отправки письма в нужной кодировке */
    class TEmail {
    public $from_email;
    public $from_name;
    public $to_email;
    public $to_name;
    public $subject;
    public $data_charset='UTF-8';
    public $send_charset='windows-1251';
    public $body='';
    public $type='text/plain';
    function send(){
    $dc=$this->data_charset;
    $sc=$this->send_charset;
    $enc_to=mime_header_encode($this->to_name,$dc,$sc).' <'.$this->to_email.'>';
    $enc_subject=mime_header_encode($this->subject,$dc,$sc);
    $enc_from=mime_header_encode($this->from_name,$dc,$sc).' <'.$this->from_email.'>';
    $enc_body=$dc==$sc?$this->body:iconv($dc,$sc.'//IGNORE',$this->body);
    $headers='';
    $headers.="Mime-Version: 1.0\r\n";
    $headers.="Content-type: ".$this->type."; charset=".$sc."\r\n";
    $headers.="From: ".$enc_from."\r\n";
    return mail($enc_to,$enc_subject,$enc_body,$headers);
    }
    }
    $emailgo= new TEmail; // инициализируем супер класс отправки
    $emailgo->from_email= 'zakaz24@****'; // от кого
    $emailgo->from_name= 'заявки на обслуживание';
    $emailgo->to_email= 'zakaz@****'; // кому
    $emailgo->to_name= $name;
    $emailgo->subject= $subject; // тема
    $emailgo->body= 'Имя клиента: ' . $name . '; Телефон: ' . $tel . '; Текст заявки:' .$message; // сообщение
    $emailgo->send(); // отправляем
    $json['error'] = 0; // ошибок не было
    echo json_encode($json); // выводим массив ответа
    } else { // если массив POST не был передан
    echo 'GET LOST!'; // высылаем
    }
    ?>

    Спасибо.

    • +1
      Михаил Ушенин Михаил Ушенин 14 ноября 2023 12:08 #

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

    • +1
      Соболев Григорий Соболев Григорий 14 ноября 2023 12:21 #

      Эта форма не работает. Нужно, чтобы данная форма брала данные для отправки из <font color="#000000">"webasyst/webasyst/settings/email/"</font>

    • +1
      Соболев Григорий Соболев Григорий 14 ноября 2023 16:07 #

      <h2>Будем рады помочь Вам!</h2>
      <h3>Для вызова специалиста, заполните небольшую форму:</h3>
      <form id="mypost_form" action="/wa-data/public/site/my_send_form.php" method="post" enctype="multipart/form-data">
      <p style="font-weight:bold;margin:10px">Номер телефона:</p>
      <input type="text" name="tel_" size="25" value="" placeholder="+7 978 xxx-xx-xx">
      <p style="font-weight:bold;margin:10px">Ваше имя:</p>
      <input type="text" name="name_" size="30" value="" placeholder="Владимир Владимирович">
      <p style="font-weight:bold;margin:10px">E-mail:</p>
      <input type="text" name="email_" size="30" value="" placeholder="info@mail.ru">
      <p style="font-weight:bold;margin:10px">Какую задачу вы хотите решить?</p>
      <select style="border-radius: 100px 6px 6px 100px;padding-right:7px" name="task_">
      <option value="Нужен специалист по кухням.">Нужен специалист по кухням.</option>
      <option value="Нужен специалист по посуде и инвентарю.">Нужен специалист по посуде и инвентарю.</option>
      <option value="Открытие и оснащение ресторана.">Открытие и оснащение ресторана.</option>
      <option value="Открытие и оснащение магазина.">Открытие и оснащение магазина.</option>
      <option value="Специалист по ремонту и обслуживанию.">Специалист по ремонту и обслуживанию.</option>
      <option value="Укажите свое...">Укажите свое...</option>
      </select>
      <p style="font-weight:bold;margin:10px">Дополнительные вопросы к нам:</p>
      <textarea style="width: 360px" name="message_" placeholder="Сразу посчитать 2 пароконвектомата и 1 печь для пиццы"></textarea>
      <p><input type="submit" value="ОТПРАВИТЬ"></p>
      </form>
      {literal}<script>
      $(document).ready(function() { // вся магия после загрузки страницы
      $("#mypost_form").submit(function(){ // перехватываем все при событии отправки
      var form = $(this); // запишем форму, чтобы потом не было проблем с this
      var error = false; // предварительно ошибок нет
      form.find('input, textarea').each( function(){ // пробежим по каждому полю в форме
      if ($(this).val() == '') { // если находим пустое
      alert('Заполните поле "'+$(this).attr('placeholder')+'"!'); // говорим заполняй!
      error = true; // ошибка
      }
      });
      if (!error) { // если ошибки нет
      var data = form.serialize(); // подготавливаем данные
      $.ajax({ // инициализируем ajax запрос
      type: 'POST', // отправляем в POST формате, можно GET
      url: '/wa-data/public/site/my_send_form.php', // путь до обработчика, у нас он лежит в той же папке
      dataType: 'json', // ответ ждем в json формате
      data: data, // данные для отправки
      beforeSend: function(data) { // событие до отправки
      form.find('input[type="submit"]').attr('disabled', 'disabled'); // например, отключим кнопку, чтобы не жали по 100 раз
      },
      success: function(data){ // событие после удачного обращения к серверу и получения ответа
      if (data['error']) { // если обработчик вернул ошибку
      alert(data['error']); // покажем её текст
      } else { // если все прошло ок
      alert('Ваше обращение отправлено!'); // пишем что все ок
      }
      },
      error: function (xhr, ajaxOptions, thrownError) { // в случае неудачного завершения запроса к серверу
      alert(xhr.status); // покажем ответ сервера
      alert(thrownError); // и текст ошибки
      },
      complete: function(data) { // событие после любого исхода
      form.find('input[type="submit"]').prop('disabled', false); // в любом случае включим кнопку обратно
      }
      });
      }
      return false; // вырубаем стандартную отправку формы
      });
      });
      </script>{/literal}
      <div id="result_mypost_form"></div>
    • +1
      Bilibin Alexander Bilibin Alexander 21 декабря 2023 17:04 #

      Добрый день!

      В связи с тем, что у  меня  на фреймворке созданы несколько сайтов, использование для них одной и той же формы обратной связи из Блоков весьма затруднительно (для каждого сайта свои адреса почты и т.п.). Поэтому я использую вот такую форму на  каждом сайте, меняя почту и ссылку  на политику, но никак не могу заставить ее писать сообщения о незаполненных полях красным или иным цветом. Подскажите, пожалуйста, где и как это можно сделать? Спасибо.

      {$errors = array()}
      {if $wa->post("send") and $wa->sendEmail("", $errors)}
      <h1>Ваше сообщение успешно отправлено!</h1>
      <p>Мы обязательно свяжемся с Вами в ближайшее время.</p>
      {else}
      <div class="wa-form">
      <form method="post" action="">
      <div class="row half">
      <div class="6u"><input name="name" type="text" value="{$wa->post("name")|escape}" placeholder="[s`Name`]"></div>
      <div class="6u">
      <input {if !empty($errors.email)}class="wa-error"{/if} name="email" type="text" value="{$wa->post("email")|escape}" placeholder="[s`Email`]">
      {if !empty($errors.email)}<em class="wa-error-msg">{$errors.email}</em>{/if}
      </div>
      </div>
      <div class="row half">
      <div class="12u">
      <input type="hidden" name="subject" value="[s`Website request`]">
      <input type="text" {if !empty($errors.body)}class="wa-error"{/if} name="body" placeholder="[s`Phone`] или [s`Message`]">
      {if !empty($errors.body)}<em class="wa-error-msg">{$errors.body}</em>{/if}
      </div>
      </div>
      <div class="row">
      {*<div class="4u" style="text-align:center;"><br><br>Введите код с картинки:
      </div>*}
      <div class="8u" style="text-align:center;">
      {$wa->captcha(!empty($errors.captcha))}
      {if !empty($errors.captcha)}<em class="wa-error-msg">{$errors.captcha}</em>{/if}
      </div>
      </div>
      {$agreement_link = "http://  "}
      {if $agreement_link}
      <div class="wa-field">
      <div class="wa-value">
      <input type="hidden" name="agree_to_terms" value="">
      <label>
      <input type="checkbox" name="agree_to_terms" value="1"{if $wa->post("agree_to_terms")} checked{/if}>
      [s`I agree to the`] <a href="{$agreement_link|escape}" target="_blank">[s`personal data protection policy`]</a><br>
      {if !empty($errors.agree_to_terms)}<em class="wa-error-msg">{$errors.agree_to_terms}</em>{/if}
      </label>
      </div>
      </div>
      {/if}
      <div class="12u">
      <div>
      {if !empty($errors.all)}<em class="wa-error-msg">{$errors.all}</em><br>{/if}
      <input type="submit" value="Запросить" name="send" class="button">
      </div>
      </div>
      </form>
      </div>
      {/if}

      Добавить комментарий

      Чтобы добавить комментарий, зарегистрируйтесь или войдите

      Раздел помощи работает на основе приложения «Хаб»