[Решено] Подмена контента для перешедших из Я.Директа пользователей

Добрый день! На сайте под управлением MODX Revo требуется настроить подмену номеров телефонов в шапке, подвале и разделе «Контакты» для пользователей перешедших по ссылке Я.Директ. Нужно направление, куда двигаться: как определить таких посетителей? Требуется написать сниппет или плагин? Если плагин, на какое событие он должен реагировать?
Владимир
10 апреля 2019, 13:11
modx.pro
520
0

Комментарии: 6

Андрей
10 апреля 2019, 13:47
+1
Передавать в ссылке UTM метку, и на сайте в зависимости от неё выводить нужный контент. Даже компонент есть готовый — utmHeaders. Либо можно самостоятельно обработать GET в сниппете или с помощью Fenom.
    Владимир
    11 апреля 2019, 16:04
    0
    Спасибо! Среди комментариев в обсуждении компонента нашел интересующую меня информацию здесь modx.pro/components/16431#comment-102120
    Теперь интересует другое: если пользователь перешел на внутреннюю страницу и адресная строка обновилась, возможно ли откуда-то извлечь метку страницы входа или нет?
      Андрей
      11 апреля 2019, 17:02
      +1
      Можно сделать свой сниппет, и в нём при первом переходе с определённой метки записывать значение в сессию, куки, или ещё куда нибудь)
        Владимир
        11 апреля 2019, 19:04
        0
        Благодаря сообществу нашёл решение. Возможно, кому-то понадобится:
        // устанавливаем параметры сниппета
        // key - метка, которую отслеживаем, по умолчанию utm_source
        $key = $modx->getOption('key', $scriptProperties, 'utm_source');
        // value - значение метки из параметра key, в зависимости от которого будем подменять контент, по умолчанию yandex
        $value = $modx->getOption('value', $scriptProperties, 'yandex');
        
        $symbols = array(" ", "-", "(", ")"); // массив символов, которые будем вырезать из номера телефона, чтобы заполнить href="tel:"
        $spaces = array("", "", "", ""); // массив пустых значений для подмены вырезаемых символов из номера телефона
        
        session_start();
        if (!isset($_SESSION['utm_source'])) {
          $_SESSION['utm_source'] = $_GET[$key]; // заносим в сессию параметр utm_source, присваиваем ему передаваемое через get-запрос значение отслеживаемой метки
        }
        session_write_close();
        
        if ($_SESSION['utm_source'] == $value) { // если значение метки совпадает со значением параметра сниппета
            // создаем массив phones, куда вносим номера телефонов для подмены
            $phones = array(
               'main' => $modx->getOption('default__phones_direct') // номера телефонов берём из предварительно созданных системных настроек, чтобы контент-менеджеры могли легко сменить их (формат номера +7 (999) 999-99-99)
            );
            
            foreach ($phones as $name => $phone) { // для каждого из телефонов в массиве создаём группу плейсхолдеров
                $modx->setPlaceholders(array(
                   $name => $phone, // получится [[+phones__main]] со значением [[++default__phones_direct]]
                   $name.'_edited' => str_replace($symbols, $spaces, $phone) // получится [[+phones__main_edited]] со значением [[++default__phones_direct]], откуда будут вырезаны лишние символы для вывода в href="tel:"
                ),'phones__');
            }
        } else { // то же самое для случая, когда пользователь пришёл по обычной ссылке без параметров
            $phones = array(
               'main' => $modx->getOption('default__phones_main'),
               'extra' => $modx->getOption('default__phones_extra'),
               'mobile' => $modx->getOption('default__phones_mobile')
            );
            
            foreach ($phones as $name => $phone) {
                $modx->setPlaceholders(array(
                   $name => $phone,
                   $name.'_edited' => str_replace($symbols, $spaces, $phone)
                ),'phones__');
            }
        }
        Вызываем сниппет [[getUtmSource]] на странице или в шаблоне, где нужно подменить контент (в моём случае номера телефонов), и выводим плейсхолдеры в код вида
        <a href="tel:[[+phones__main_edited]]">[[+phones__main]]</a>, <a href="tel:[[+phones__mobile_edited]]">[[+phones__mobile]]</a>
        и т.д. Для каждой страницы можно задать свои значения сравнения utm_source, используя доп. поле myValue: [[getUtmSource?&value=`myValue`]]
          РОМАН
          22 февраля 2020, 21:34
          1
          0
          От вашего сниппета оставляем
          // устанавливаем параметры сниппета
          // key - метка, которую отслеживаем, по умолчанию utm_source
          $key = $modx->getOption('key', $scriptProperties, 'utm_source');
          
          session_start();
          if (!isset($_SESSION['utm_source'])) {
            $_SESSION['utm_source'] = $_GET[$key]; // заносим в сессию параметр utm_source, присваиваем ему передаваемое через get-запрос значение отслеживаемой метки
          }
          session_write_close();
          Выводим сниппет в начале каждой странице
          {if $.get.utm_source}
          {'!getUtmSource' | snippet}
          {/if}
          И используем плейсхолдер
          {$.session.utm_source}
          в Fenom, как душе угодно!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
6