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

Во фреймворке Webasyst есть встроенная возможность быстро добавить форму обратной связи на любую страницу сайта:

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



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


Несколько хитростей

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

Сообщения, которые посетители сайта оставляют через форму обратной связи, отправляются на email-адрес, указанный в поле «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>


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

  • +2
    Yuri Manko Yuri Manko 3 сентября 2015 08:48 #

    Я хочу убрать не только каптчу, но и поле Email, например. Как это возможно сделать?

  • +3
    Владимир Владимир 23 сентября 2015 03:18 #

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

    Сейчас все сообщения туда уходят.

    • +1
      Иван Иван 11 мая 2016 13:06 #

      В спам сообщения уходят в том числе из-за адреса From, который по умолчанию берётся из формы, так делать не нужно. Укажите в адресе From noreply@vashsite.ru, добавьте в заголовки письма Reply-To с адресом из формы.

    • +3
      axel999x axel999x 7 июня 2016 16:53 #

      Добрый день!

      А как сделать поле ввода телефона?

      И Возможно ли сделать отправку с разных страниц сайта на разные адреса с разными темами письма?


      • +2
        Zhak Zhak 17 августа 2017 17:54 #

        Приветствую!

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

        Решил поделиться инструкцией вероятно кому-нибудь пригодится:

        1) Находим в каталоге wa-system/view файл: waViewHelper.class.php

        2) В этом файле находим функцию public function sendEmail($to, &$errors)

        3) Далее в блоке:

         $body = _ws('Name').': '.htmlspecialchars($this->post('name'))."<br>\n".
                _ws('Email').': '.htmlspecialchars($email)."<br><br>\n".$body;

        вставляем поля телефона и адреса:

         $body = _ws('Name').': '.htmlspecialchars($this->post('name'))."<br>\n".
            _ws('Phone').': '.htmlspecialchars($this->post('phone'))."<br>\n".
            _ws('Address').': '.htmlspecialchars($this->post('address'))."<br>\n".
                _ws('Email').': '.htmlspecialchars($email)."<br><br>\n".$body;

        Если необходимо после этого блока можно сделать проверку на заполнение.

        4. Заходим в режиме администратора и редактируем блок обратной связи (у меня он называется: site.send_email_form)

        5) В нужном месте вставляем:

          <div class="wa-field">
            <div class="wa-name">[s`Phone`]:</div>
            <div class="wa-value"><input name="phone" type="text" value="{$wa->post("phone")|escape}"></div>
          </div>
          <div class="wa-field">
            <div class="wa-name">[s`Address`]:</div>
            <div class="wa-value"><input name="address" type="text" value="{$wa->post("address")|escape}"></div>
          </div>

        как показано ниже:

        6) Результат:
        • +1
          Михаил Ушенин Михаил Ушенин Webasyst 18 августа 2017 09:24 #

          Вы забыли одну "мелочь": после каждого обновления фреймворка Webasyst изменения в PHP-файле придётся выполнять повторно.

        • +1
          Андрей Какурин Андрей Какурин 18 ноября 2017 16:10 #

          Меня вот попросили добавить поля в Обратную форму связи. А сайт крутится в облаке. доступа к системным файлам нет.

          И Ваше решение слетит при первом же обновлении.

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

          Задача добавить в форму VIN, Модель/год выпуска, Необходимая эмблема

          Идем в сайт-> блоки находим site.send_email_form

          Добавляем поля в разметку формы.

          <div class="wa-field">
              <div class="wa-name">VIN:</div>
              <div class="wa-value"><input name="VIN" type="text" value=""></div>
            </div>
            
            <div class="wa-field">
              <div class="wa-name">Модель/год выпуска:</div>
              <div class="wa-value"><input name="model" type="text" value=""></div>
            </div>
            <div class="wa-field">
              <div class="wa-name">Необходимая эмблема:</div>
              <div class="wa-value"><input name="emblema" type="text" value=""></div>
            </div>

          выше формы вставляем javascript, который перед отсылкой формы вставит в тело сообщения данные из доп. полей.


          <script>
          function addFieldsToMessage(){
          var field_vin = document.getElementsByName('VIN')[0].value;
          var field_model = document.getElementsByName('model')[0].value;
          var field_emblema = document.getElementsByName('emblema')[0].value;
          var message = document.getElementsByName('body')[0].value;
          message = (field_emblema=='')? message: ('Необходимая эмблема:'+field_emblema+';'+message);
          message = (field_model=='')? message: ('Модель/год выпуска:'+field_model+';'+message);
          message = (field_vin=='')? message: ('VIN:'+field_vin+';'+message);
          document.getElementsByName('body')[0].value=message;
          }
          </script>

          Исправляем форму, чтобы перед отправкой вызвать функцию. Следующий код

          <form method="post" action="">

          Исправляем на

          <form method="post" onsubmit="addFieldsToMessage(); return true;" action="">

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

          Пришлось разбирать сообщение и заполнять доп поля при новой загрузке страницы

          В конец блока вставляем скрипт разбора, вызывается один раз при загрузке формы.

          <script>
          $(function (){
          var message = document.getElementsByName('body')[0].value;
          var arr = message.split(';');
          message='';
          arr.forEach(function(item){
          	var arr1=item.split(':');
          	switch(arr1[0]){
          		case 'Необходимая эмблема':document.getElementsByName('emblema')[0].value=arr1[1]; break;
          		case 'Модель/год выпуска':document.getElementsByName('model')[0].value=arr1[1]; break;
          		case 'VIN':document.getElementsByName('VIN')[0].value=arr1[1]; break;
          		default: message = message + item; break;
          	}
          });
          document.getElementsByName('body')[0].value = message;
          });
          </script>

          Форма выглядит так


        • +4
          Yury Yury 13 апреля 2017 12:13 #

          В связи с внесением в закон новых оснований для штрафа (Федеральный закон от 07.02.2017 №13-ФЗ) хотелось бы добавить в код формы обратной связи реализацию функции получения согласия.
          Вот основание для беспокойства: "Размещение формы обратной связи на сайте расценивается как сбор информации о гражданах. Значит, компания должна выполнить обязанности оператора персональных данных. А именно: уведомить Роскомнадзор о намерении собирать и обрабатывать персональные данные, получить согласие субъекта, разработать политику конфиденциальности и обеспечить неограниченный доступ к ней. С 1 июля 2017 года отсутствие такой политики обойдется компании в 30 тыс. руб. При разработке формы обратной связи реализуйте функцию получения согласия: поставить соответствующую отметку до отправки анкеты."
          Так что было бы не плохо если бы вы обратили на это внимание. Может кому то нужна форма обратной связи.

          • +2
            BM WEB BM WEB 6 июня 2017 15:03 #

            Поддерживаю Вас! их коробки формы шопскрипта вообще не как не настроить, все костылями!

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

          • +2

            Описанный Вами в статье код для отключения капчи

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

            не действует на google reCaptcha, подскажите как отключить гугл reCapthca

          • +1
            Алексей Алексей 26 ноября 2017 16:56 #

            Подскажите, пожалуйста, как добавить поле "Тема" (или хотя бы отредактировать то, что туда пишет Вебасист). После последнего апгрейда русский текст зачем-то заменили английским.

            • +1
              Михаил Ушенин Михаил Ушенин Webasyst 27 ноября 2017 09:45 #

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

              [s`Website request`]

              на

              [s`Request from website`]

              или на любой текст по-русски в строке вида

              <input type="hidden" name="subject" value="[s`Website request`]">
            • +1
              pYmpYY pYmpYY 8 декабря 2017 16:02 #

              А если две формы на страницу? никто не знает как это реализовать?

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

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