workRave
@workRave

Call tracking (Колл-трекинг, отслеживание звонков). Где ошибка?

Добрый день! Я начинающий программист.
Я пытаюсь реализовать на сайте статический колл-трекинг т.е. что бы при переходе с Yandex-Рекламы (к примеру) - появлялся отдельный номер.
Call tracking (Колл-трекинг, отслеживание звонков) — метод учета офлайн конверсий в интернет-маркетинге. Call tracking - это технология, которая делает возможной бизнес модель "реклама с оплатой за звонок" (Pay Per Call (англ.)), позволяя связать количество входящих звонков с эффективностью рекламного канала, а также предоставляя дополнительную информацию о телефонных звонках.

Мне нужно:
При переходе по ссылке (к примеру): karlson-tour.ru?utm_source=yandex&utm_medium=cpc&u...
Если есть utm_source с параметром vk, то в течении 30 дней показывать номер +78124099043
Если нет, то показывать стандартный номер: +78122411466
Я написал функцию:
function getPhone($arr)
{
    $phone = '+78122411466';
    
    if (isset($_GET['utm_source']) && $_GET['utm_source'] == 'vk'){
        setcookie('phone','+78124099043'); //Почему не работает?
        $phone = '+78124099043';
    }
    
    if (isset($_COOKIE['phone'])) {
      $phone  = "{$_COOKIE['phone']}"; // Зачем сдесь нужны фигурные скобки?
    }
    
    if ($arr == code) { return $phone;} 
    if ($arr == format) {
        $phone = substr($phone, 0, 2).' ('.substr($phone,2,3).') '.substr($phone,5,3).'-'.substr($phone,8,2).'-'.substr($phone,10,2); 
//А можно как-то проще написать форматирование?
        return $phone;
    }
}

Код вставки:
Неотформатриованный номер:
<?= getPhone(code); ?> // Правильные ли я выбрал параметры и метод вставки?

Отформатированный номер: <?= getPhone(format); ?>

Мой код не срабатывает?
Почему setcookie на работает?
Какие ошибки я допустил?
Как упросить код?
  • Вопрос задан
  • 321 просмотр
Пригласить эксперта
Ответы на вопрос 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Прочитайте документацию setcookie(), посмотрите какие параметры принимает эта функция, посмотрите, что вы ей передаёте. Сразу станет понятно, почему она работает не так, как вы ожидаете (обратите внимание на разницу между "не работает" и "работает не так, как я хочу").

$phone  = "{$_COOKIE['phone']}"; // Зачем сдесь нужны фигурные скобки?
Фигурные скобки помогают php правильно обработать переменные внутри строки. В данном случае они не нужны, можно просто написать "$_COOKIE['phone']", но если хорошо подумать, станет понятно, что мы занимаемся какой-то хренью - переводим переменную в строку, чтобы интерполировать и получить её значение. Убираем кавычки вообще: $phone = $_COOKIE['phone'];

А можно как-то проще написать форматирование?
Можно использовать другие конструкции: sprintf, preg_replace, но проще код от этого не станет. Ещё можно подключить какую-нибудь библиотеку, в которой эта задача уже решена, но с вашим уровнем программирования пока не стоит. Встроенного Волшебного Форматирователя Номеров Телефонов в php, к сожалению, нет. Вот дождёмся, когда его в джаву встроят и тогда портируем.

Какие ошибки я допустил?
Code и format - это должны быть строки, а вы используете константы (без кавычек). Такие константы не определены, поэтому php просто возвращает их название в виде строки и код работает как должен. Но если включить вывод предупреждений, вы увидите, что интерпретатору не очень нравится то, чем вы его кормите.
Но это не самая большая проблема. Зачем вообще в этой функции аргумент, да ещё с таким ужасным названием? Явно же должно быть две функции: одна получает номер, другая его форматирует. Композиция, все дела.
Ответ написан
Комментировать
VGrabko
@VGrabko
Golang, Php, Js
до слёз.

"{$_COOKIE['phone']}" -> $_COOKIE['phone']

включите показ ошибок на экран. Какую версию php юзаете?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы