utmHeaders - Замена заголовков в зависимости от  utm Меток (или других GET параметров)

Разработка для клиента. Выкладываю по принципу, чего без дела лежать, может кому пригодится.

Основная идея:
Замена заголовка h1 или любого другого контента, хоть вообще всей страницы, на основе совпадения по указанному GET параметру адресной строки.


Хороший пример замена заголовков, в зависимости от utm параметров рекламной кампании

Работает по точному совпадению в заранее заполненной таблице.


Вариант использование:

1. Заполняем таблицу возможными вариантами UTM меток. Для каждого варианта UTM метки задаем свой отдельный заголовок h1.
2. Вместо заголовка вызваем сниппет utmHeaders и указываем какой GET параметр адресной строки смотреть. По умолчанию это utm_term.
3. Сниппет проверяет есть ли в адресной строке указанный параметр. При входе на сайт без UTM метки посетителю предлагается стандартный вариант заголовка. Если указанный параметр присутствует — его значение проверяется по базе и если такой был предусмотрен — подставляется уникальный заголовок.

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

У компонента один единственный чанк вывода
{if $header}
    {$header}
{else}
    <h1>Стандартный
                <strongЗаголовок/strong></h1>
{/if}
Как видите все просто — если найдено совпадение в базе подставляется оно, если нет — выводим стандартный заголовок. Чанк написан на феном — это означает обязательное использование на сайте pdoTools, как зависимости. Компонент устанавливается автоматически, в случае его отсутствия.

UPD 13.12.18
Добавлена возможность задать правило только для конкретной страницы. Если совпала метка в адресной строке и указанная страница — правило отработает и заголовок заменится. Сделано это для того, чтобы по одной и той же метке на разных страницах генерировать разные заголовки.
Николай Савин
24 сентября 2018, 08:20
modx.pro
9
1 740
+14
Поблагодарить автора Отправить деньги

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

Кудашев Сергей
24 сентября 2018, 10:34
+2
Рекомендовал бы заменить конструкцию в сниппете:
if (!$utmHeaders) {
    return 'Could not load utmHeaders class!';
}
на что-то подобное
if (!$utmHeaders) {
    $modx->log(modX::LOG_LEVEL_ERROR, 'Could not load utmHeaders class!');
    return '';
}
Смысла выводить текст с ошибкой посетителю нет, к тому же это может поломать верстку в зависимости от места, где мы будем вызывать сниппет. А о том, что что-то пошло не так, мы бы никогда не узнали в Вашем варианте :)
srs
srs
25 сентября 2018, 16:40
0
Думаю должна прокатить и такая конструкция на чистом феном:
{if $.get.utm_source == 'utmElement'}
    вывод 1
{else}
    вывод 2
{/if}
    Николай Савин
    25 сентября 2018, 17:12
    0
    Скорее тогда уж switch case. Я же предлагаю таблицу на десятки разных вариантов
      srs
      srs
      25 сентября 2018, 17:25
      0
      Можно и свич кейс, просто я привел в пример аналог того, что указан в посте:
      {if $header}
          {$header}
      {else}
          <h1>Стандартный
          <strongЗаголовок/strong></h1>
      {/if}
      P.S. Я не в коем случае не утверждаю, что компонент бесполезный, мой пример — скорее вариант быстрого и очевидного решения. В то врем как ваше решение может управляться из админки всякими сеошниками прочими людьми и это очевидный плюс.
        Николай Савин
        26 сентября 2018, 05:59
        0
        Это нефига не верный пример. В плейсхолдер header попадает не get параметр, а значение из таблицы вариантов.
          srs
          srs
          01 октября 2018, 19:26
          0
          Я понимаю, что прошло много времени, просто не часто тут бываю и почту особо не чекаю, но…
          Господи этож очевидно, но механизм-то по сути один и тот же. Проверка варианта и вставка нужного результата. У тебя из таблицы (а перед этим обработка get, а иначе как она поймет что прилетело), в моем примере сразу проверка get и выдача результата.
    Григорий
    27 сентября 2018, 12:45
    0
    Отлично. То, что надо…
      Иван Кизименко
      28 сентября 2018, 13:39
      0
      Дальше под это дело можно развить в замену не только текста, но и изображений, а возможно и вывод других чанков.
        Николай Савин
        28 сентября 2018, 13:44
        0
        Уже Сейчас никто не мешает вставить вместо текста код вызова чанка или сниппета.
        Владимир
        07 октября 2019, 14:38
        0
        Доброго дня
        Выбор страницы хромает. Вписать просто ID не получается как и не получается ввести заголовок страницы, а если страниц много, то приходиться буквально все перелистывать. Если страница не выбрана, то метка не учитывается, а хорошо бы еще вариант «любая страница» что бы метка срабатывала тогда на всех страницах.
        Ну и очень было бы полезно при наличии метки вешать куки, что бы при переходе по страницам и в случае, например, заказа, было понятно, что клиент пришел по совершенно определенному объявлению с такой-то меткой (и в заказе бы это отражалось тогда)
          Фарит
          19 октября 2019, 23:29
          0
          Очень хорошие предложения!

          Сейчас удобнее пользоваться феном — {if $.get.utm_source == 'utmElement'}
          Можно им же задать все страницы для подстановки и также для определенной, а utmHeaders так не может.

          Идея utmHeaders хорошая для того чтобы было легче передать сайт менеджерам.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          12