Выпустил недавно модуль в alpha версию, который предназначен для замены телефонов на сайте в зависимости от UTM меток. Он может быть полезен для директологов и SEOшников.
Для настройки достаточно зайти на соответствующую страницу, и заполнить поля необходимыми значениями.
Пример см. на рис. ниже
Если появятся идеи или найдете баги, буду рад вашим issue и патчам на drupal.org
Ссылка на модуль: https://www.drupal.org/project/calltracking
Команда для composer: composer require drupal/calltracking
Комментарии
Спасибо!
Поправочка, на орге он у тебя альфа)
о, точно. Сейчас исправлю. Спасибо)
Интересный модуль.
Скажи - сколько можно добавлять вариаций? можно ли на уровень ниже опуститься в UTM name?
Номер телефона должен быть каким-то хитрым образом вставлен изначально?
1. Бесконечно много вариаций
2. Не совсем понял вопрос про опуститься ниже
3. Нет, на сайте он может быть добавлен как угодно. Главное в настройках указать точно так, как на сайте.
Ага, понял.
Как нибудь запоминается первый заход? Кука может дней на 30?
если в drupalSettings просто приаттачить $values код будет короче, чище и понятнее:
<?php
// Each all UTM labels.
function calltracking_preprocess_page(&$variables) {
$utms = [];
$route = \Drupal::routeMatch()->getRouteName();
$config = \Drupal::config('calltracking.settings');
$values = $config->get('fields');
// foreach ($values as $value) {
// $name = $value['key'];
// $source = $value['val'];
// $from = $value['from'];
// $to = $value['to'];
//
// $utms[$name][$source][$from] = $to;
// }
// Add libraries.
$variables['#attached']['library'][] = 'calltracking/main';$variables['#attached']['drupalSettings']['telephones'] = $values;
if ($route == 'calltracking.admin_settings') {
$variables['#attached']['library'][] = 'calltracking/forms';
}
}
?>
"use strict";
Drupal.behaviors.main = {
attach: function (context) {
// Get url query.
var urlParams = new URLSearchParams(window.location.search);
var newBody = document.body.innerHTML;
drupalSettings.telephones
.filter(function (data) {
return urlParams.has(data.key) && urlParams.get(data.key) === data.val
})
.forEach(function (data) {
newBody = newBody.replace(data.from, data.to);
});
document.body.innerHTML = newBody;
}
}
})(jQuery, Drupal, drupalSettings);