Skip to content

Аромат2, Фантазия2, Чистота

insales.ui.forms.js

Можно взять весь файл из свежей установки шаблона или действовать по инструкции ниже.

Вместо этого кода:

var recaptchaVerify = function (response) {
  self.captcha = { solution: response };
  if (response) {
    self.unmark();
  }

  return ;
};

setTimeout(function () {
  var loadCapthca = setInterval(function () {
    if (grecaptcha) {
      grecaptchaWidget = grecaptcha.render('gRecaptcha', {
        sitekey: key,
        callback: recaptchaVerify
      });
      clearInterval(loadCapthca);
      window = { grecaptchaWidget: grecaptchaWidget };
    }
  }, 500);
}, 0);

Вставить:

var recaptchaVerify = function (response) {
  self.captcha = { solution: response };
  if (response) {
    self.unmark();
  }

  jquery('[name="g-recaptcha-response"]').html(response);

  return ;
};

if (Shop.config.config.feedback_captcha_enabled) {
  EventBus.subscribe('recaptcha:insales:loaded', function () {
    var key = Shop.config.get('recaptcha_key').recaptcha_key;

    $('.form-row #gRecaptcha').each(function(index, el) {
      var randomId = 'gRecaptcha' + _.random(1, 99999999)
      $(this).attr('id', randomId);

      grecaptchaWidget = grecaptcha.render($(el).get(0), {
        sitekey: key,
        callback: recaptchaVerify
      });
      window = { grecaptchaWidget: grecaptchaWidget };
    });
  })
} else {
  setTimeout(function () {
    var loadCapthca = setInterval(function () {
      if (grecaptcha) {
        try {
          $('.form-row #gRecaptcha').each(function(index, el) {
            var randomId = 'gRecaptcha' + _.random(1, 99999999)
            $(this).attr('id', randomId);
            grecaptchaWidget = grecaptcha.render(randomId, {
              sitekey: key,
              callback: recaptchaVerify
            });
            window = { grecaptchaWidget: grecaptchaWidget };
          });

          clearInterval(loadCapthca);
        } catch (e) {
          console.log(e);
          clearInterval(loadCapthca);
        }
      }
    }, 500);
  }, 0);
}

page.liquid

В _options добавить (не забыть про зяпятые при добавлении нового элемента массива):

{% if settings.feedback_captcha_enabled %}
{
  title: '{{ messages.field_captcha }}',
  type: 'captcha',
  required: true,
}
{% endif %}

header.liquid

В _backcallForm добавить (не забыть про зяпятые при добавлении нового элемента массива):

{% if settings.feedback_captcha_enabled %}
{
  title: '{{ messages.field_captcha }}',
  type: 'captcha',
  required: true,
}
{% endif %}

Виджет обратной связи на главной

Стили:

.feedback-form .form-row.recaptcha-wide {
  flex-basis: 100%;
  justify-content: center;
  max-width: 100%;
}

index.js

Между этим кодом:

if (Site.template != 'index') {
  return;
}

и этим:

  $(document).on('submit', '.js-widget-feedback', function (event) {

Вставить:

var recaptchaVerify = function (response) {
  jquery('[name="g-recaptcha-response"]').html(response);
};

EventBus.subscribe('recaptcha:insales:loaded', function () {
  var key = Shop.config.get('recaptcha_key').recaptcha_key;

  $('.form-row .js-g-recaptcha').each(function(index, el) {
    var randomId = 'gRecaptcha' + _.random(1, 99999999)
    $(this).attr('id', randomId);

    grecaptchaWidget = grecaptcha.render($(el).get(0), {
      sitekey: key,
      callback: recaptchaVerify
    });
    window = { grecaptchaWidget: grecaptchaWidget };
  });
})

index.js

В этой части кода:

Shop.sendMessage(msg)
  .done(function (response) {
    alertify.success(response.notice);
    $widgetFeedback.trigger('reset');
    val_send++;
    sessionStorage.setItem('send_success', val_send);
  })
  .fail(function (response) {
    $.each(response.errors, function (i, val) {
      alertify.error(val[0]);
    });
  });

Заменить fail:

  .fail(function (response) {
    $.each(response.errors, function (i, val) {
      var errorText = (typeof val == 'string') ? val : val[0];
      alertify.error(errorText);
    });
  });

widget_feedback.liquid

Добавить в код формы:

{% if settings.feedback_captcha_enabled %}
<div class="form-row recaptcha-wide">
  <div class="js-g-recaptcha">
  </div>
</div>
{% endif %}

scripts.liquid

Вставить в Site.messages строку:

field_captcha: '{{ messages.field_captcha }}',

Как должно получиться:

    messages: {
      field_name: '{{ messages.field_name }}',
      field_email: '{{ messages.field_email }}',
      field_message: '{{ messages.field_message }}',
      label_product: '{{ messages.label_product }}',
      label_variant: '{{ messages.label_variant }}',
      field_captcha: '{{ messages.field_captcha }}',

      preorder: '{{ messages.preorder }}',
      button_submit: '{{ messages.button_submit }}'
    }

product.js

Вставить перед alertify.modal({ formDefination: preorderForm }).set('title', Site.messages.preorder);

    if(Shop.config.config.feedback_captcha_enabled) {
      preorderForm.fields.push({
        title: Site.messages.field_captcha,
        type: 'captcha',
        required: true,
      })
    }

settings.html

Добавить настройку в редактор сайта:

<fieldset>
  <legend>{{ messages.s_feedback_captcha_title }}</legend>
  <table>
    <tr>
      <td>
        ReCAPTCHA
      </td>
    </tr>
    <tr>
      <td> <label for="feedback_captcha_enabled">{{ messages.s_feedback_captcha_label }}</label> </td>
      <td> <input name="feedback_captcha_enabled" id="feedback_captcha_enabled" type="checkbox" /> </td>
    </tr>
  </table>
</fieldset>

messages.json

Добавить название и описание настройки:

"s_feedback_captcha_title": "Форма обратной связи",
"s_feedback_captcha_label": "Включить проверку 'Я не робот'",

"s_feedback_captcha_title": "Feedback form",
"s_feedback_captcha_label": "Enable check",