[Решено] Подмена контента для перешедших из Я.Директа пользователей
Добрый день! На сайте под управлением MODX Revo требуется настроить подмену номеров телефонов в шапке, подвале и разделе «Контакты» для пользователей перешедших по ссылке Я.Директ. Нужно направление, куда двигаться: как определить таких посетителей? Требуется написать сниппет или плагин? Если плагин, на какое событие он должен реагировать?
Комментарии: 6
Передавать в ссылке UTM метку, и на сайте в зависимости от неё выводить нужный контент. Даже компонент есть готовый — utmHeaders. Либо можно самостоятельно обработать GET в сниппете или с помощью Fenom.
Спасибо! Среди комментариев в обсуждении компонента нашел интересующую меня информацию здесь modx.pro/components/16431#comment-102120
Теперь интересует другое: если пользователь перешел на внутреннюю страницу и адресная строка обновилась, возможно ли откуда-то извлечь метку страницы входа или нет?
Теперь интересует другое: если пользователь перешел на внутреннюю страницу и адресная строка обновилась, возможно ли откуда-то извлечь метку страницы входа или нет?
Можно сделать свой сниппет, и в нём при первом переходе с определённой метки записывать значение в сессию, куки, или ещё куда нибудь)
Благодаря сообществу нашёл решение. Возможно, кому-то понадобится:
// устанавливаем параметры сниппета
// 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`]]
От вашего сниппета оставляем
// устанавливаем параметры сниппета
// 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, как душе угодно!
Спасибо!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.