<script>
t_onReady(function () {
// Собираем UTM-параметры
var urlParams = new URLSearchParams(window.location.search);
var utmParams = {};
var hasUtm = false;
for (var [key, value] of urlParams.entries()) {
if (key.indexOf("s_") === -1 && key.indexOf("tfc_") === -1) {
utmParams[key] = value;
hasUtm = true;
}
}
if (!hasUtm) return;
// Функция добавления параметров к любому URL
function addParamsToUrl(url) {
if (!url || typeof url !== 'string') return url;
if (url.startsWith('#') || url.startsWith('javascript:') ||
url.startsWith('mailto:') || url.startsWith('tel:')) return url;
if (url.indexOf('http') === 0 && url.indexOf(window.location.hostname) === -1) return url;
try {
var urlObj = new URL(url, window.location.href);
for (var key in utmParams) {
if (!urlObj.searchParams.has(key)) urlObj.searchParams.set(key, utmParams[key]);
}
return urlObj.href;
} catch(e) {
return url;
}
}
// Функция обработки всех атрибутов, которые могут содержать URL
function processElement(el) {
// Список подозрительных атрибутов
var attrs = ['href', 'data-href', 'data-url', 'data-link', 'data-link-url',
'data-product-url', 'data-item-url', 'data-target-url', 'action'];
attrs.forEach(function(attr) {
var val = el.getAttribute(attr);
if (val && (val.indexOf('/') > -1 || val.indexOf('http') === 0)) {
var newVal = addParamsToUrl(val);
if (newVal !== val) el.setAttribute(attr, newVal);
}
});
}
// Обработка всех текущих элементов
function processAllElements(root) {
root = root || document.body;
// Все элементы
var all = root.querySelectorAll('*');
for (var i = 0; i < all.length; i++) processElement(all[i]);
// Особое внимание ссылкам
var links = root.querySelectorAll('a');
for (var i = 0; i < links.length; i++) processElement(links[i]);
}
processAllElements();
// Следим за динамически подгружаемым каталогом
document.addEventListener('tStoreRendered', function (e) {
if (e.target) processAllElements(e.target);
});
// Перехватываем все клики на уровне document в фазе захвата
document.addEventListener('click', function(e) {
var target = e.target;
// Ищем ближайший кликабельный элемент (a или любой с data-* url)
var clickable = target.closest('a, [data-url], [data-href], [data-link], [data-product-url]');
if (!clickable) return;
// Получаем итоговый URL из разных источников
var finalUrl = null;
if (clickable.href) finalUrl = clickable.href; // для <a>
else if (clickable.dataset.url) finalUrl = clickable.dataset.url;
else if (clickable.dataset.href) finalUrl = clickable.dataset.href;
else if (clickable.dataset.link) finalUrl = clickable.dataset.link;
else if (clickable.dataset.productUrl) finalUrl = clickable.dataset.productUrl;
if (!finalUrl) return;
// Пропускаем внешние ссылки и якоря
if (finalUrl.startsWith('#') || finalUrl.startsWith('javascript:') ||
finalUrl.startsWith('mailto:') || finalUrl.startsWith('tel:')) return;
if (finalUrl.indexOf('http') === 0 && finalUrl.indexOf(window.location.hostname) === -1) return;
e.preventDefault();
e.stopImmediatePropagation(); // блокируем другие обработчики Tilda
var urlWithParams = addParamsToUrl(finalUrl);
window.location.href = urlWithParams;
}, true); // true = capture phase
});
</script>