Модуль для call tracking

Главные вкладки

Аватар пользователя Мирослав Ли Мирослав Ли 19 января 2019 в 13:50
4

Выпустил недавно модуль в alpha версию, который предназначен для замены телефонов на сайте в зависимости от UTM меток. Он может быть полезен для директологов и SEOшников.
Для настройки достаточно зайти на соответствующую страницу, и заполнить поля необходимыми значениями.
Пример см. на рис. ниже

Call tracking

Если появятся идеи или найдете баги, буду рад вашим issue и патчам на drupal.org

Ссылка на модуль: https://www.drupal.org/project/calltracking
Команда для composer: composer require drupal/calltracking

Комментарии

Аватар пользователя pselfin pselfin 22 января 2019 в 11:54

Интересный модуль.
Скажи - сколько можно добавлять вариаций? можно ли на уровень ниже опуститься в UTM name?
Номер телефона должен быть каким-то хитрым образом вставлен изначально?

Аватар пользователя Мирослав Ли Мирослав Ли 22 января 2019 в 19:16
1

1. Бесконечно много вариаций
2. Не совсем понял вопрос про опуститься ниже
3. Нет, на сайте он может быть добавлен как угодно. Главное в настройках указать точно так, как на сайте.

Аватар пользователя Orion76 Orion76 23 января 2019 в 7:42

если в drupalSettings просто приаттачить $values код будет короче, чище и понятнее:

<?php
function calltracking_preprocess_page(&$variables) {
    
$utms = [];
    
$route = \Drupal::routeMatch()->getRouteName();
    
$config = \Drupal::config('calltracking.settings');
    
$values $config->get('fields');

    

// Each all UTM labels.
//    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';
    }
}
?>
(function ($, Drupal, settings) {

    "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);