Drupal 7 & Webform - добавление целей Google и Яндекс

Категория: Drupal
Дата публикации: 14 марта, 2016 - 17:46
Последнее изменение: 3 ноября, 2016 - 11:24

Задача: добавить на кнопку отправления вебформы код отслеживание целей Яндекс метрики и/или Google Analytics.

Решение: в template.php вставляем следующий код:

function THEMENAME_form_alter(&$form, $form_state, $form_id) {
  if ($form_id == 'webform_client_form_ID') {
    $form['actions']['submit']['#attributes']['onclick'] = "yaCounterNNNNN.reachGoal('foobar');";
  }
}

Если нужно повесить событие не на onclick, а на onsubmit (отправку) формы, то код преобразуется в:

function THEMENAME_form_alter(&$form, $form_state, $form_id) {
  if ($form_id == 'webform_client_form_ID') {
    $form['#attributes']['onsubmit'] = "yaCounterNNNNN.reachGoal('foobar');";
  }
}

THEMENAME заменяем на имя темы, ID на номер вебформы, foobar на ваши значения.

Комментарии

Добрый день. При добавлении

Добрый день. При добавлении цели на кнопку нужно ли прописывать id конкретной кнопки, в случае если их в форме несколько? Например, кнопки "очистить" и "отправить".

Вы изначально в функции

Вы изначально в функции указываете ['submit'] - это кнопка отправки. Дополнительно ничего указывать не нужно в обычном случае. Если же у вас нету ['submit'] или она кем-то/чем-то переназначена, то нужно конкретно для этой формы смотреть (через dsm, например).

При вставке этого кода

При вставке этого кода перестает отображаться сайт, в чем может быть причина?

Причин может быть много -

Причин может быть много - включайте вывод ошибок php/смотрите логи. В зависимости от ошибки будет понятно в чем проблема.

Ответ конечно

Ответ конечно пространственный, не дающий понимания в чем может быть причина. Если в коде отсутствует function название темы_form_alter...сайт работает и никаких изменений не происходит, как только добавляю название темы - сайт не отображается.

Ответ примерно такой же,

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

Если вы видите пустой белый

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

Вот тут https://www.drupal.org/node/158043 можно почитать про то, как включить показ ошибок. Либо обращайтесь в саппорт, чтобы они вам это сделали.

Второй вариант - посмотреть error.log вашего сайта в тот момент, когда у вас отображается белый экран, в лог должны писаться ошибки. Обычно лог доступен в панели управления хостинга и/или по фтп.

Вы просто мой герой.

Вы просто мой герой. Единственный кто указал что менять надо template.php, мне же нубу непонятно. Спасибо вам.

Добрый день. Мне необходимо

Добрый день. Мне необходимо на все формы повесить цели Яндекса и Гугла. Пробую так
function THEMENAME_form_alter(&$form, $form_state, $form_id) {
$form['#attributes']['onsubmit'] = "yaCounterNNNNN.reachGoal('foobar');";
$form['#attributes']['onsubmit'] = "gtag('send', 'pageview', '/virtual/foobar');";
}
Не работает. Подскажите, что делаю не так? Спасибо.

Кеш сбрасывали?

Кеш сбрасывали?
Что именно "не работает"? В теге form код появляется? Если да, то все работает.

p.s. более правильно проверять форму, что это именно вебформа, а не что-то еще,чтобы ложных срабатываний не было.

Да, действительно, в теге

Да, действительно, в теге form появляется код. Но только от гугла, наверно потому что он второй строкой прописан. Как сделать, что бы одновременно и яндекс и гугл был? И как проверить что это именно вебформа? Спасибо.

Чтобы оба выводились - все

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

$form['#attributes']['onsubmit'] = "yaCounterNNNNN.reachGoal('foobar'); gtag('send', 'pageview', '/virtual/foobar');";

Точно :) Спасибо. А

Точно :) Спасибо. А подскажите ещё, как добавить проверку на то, что это именно вебформа? Спасибо.

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