С помощью этой модификации можно конвертировать цены в каталоге тильда по своему курсу. Дополнительно можно вывести свой символ валюты. Модификация работает как с обычной корзиной, а также корзиной с оформлением заказа в два этапа. Поддерживает блоки каталога ST300, ST305N, ST310N, ST315N и ST320N.
Этот генератор кода доступен только тем кто оплатил подписку
Символ валюты
Первая часть кода (вставляем на страницу каталога)
<!--TICODE--><!-- Библиотека модификаций для Тильда https://ticode.dev -->
<!--TCD091-->
<script>
document.addEventListener('DOMContentLoaded', function() {
const TCDExchangeRate = 90;
const TCDProcessed = 'processed';
const TCDInterval = 50;
const TCDMySymvol = false;
let TCDintervaled;
function ticodeProcessCards() {
document.querySelectorAll('.t-store__card').forEach(function(card) {
if (!card.classList.contains(TCDProcessed)) {
const TCDpriceElem = card.querySelector('.js-product-price');
const TCDcurrencyElem = card.querySelector('.t-store__card__price-currency');
if (TCDpriceElem && TCDcurrencyElem) {
let tcpriceText = TCDpriceElem.textContent.replace(/[^0-9,.]/g, '').replace(',', '.');
const tcpriceEnd = parseFloat(tcpriceText);
if (!isNaN(tcpriceEnd)) {
const tcpriceStart = (tcpriceEnd * TCDExchangeRate).toFixed(0);
TCDpriceElem.textContent = tcpriceStart;
card.classList.add(TCDProcessed);
}
if (TCDMySymvol) {
TCDcurrencyElem.textContent = '';
}
}
}
});
}
function ticodeCardCheck() {
TCDintervaled = setInterval(() => {
ticodeProcessCards();
}, TCDInterval);
}
ticodeProcessCards();
document.querySelectorAll('.t-store__pagination a').forEach(function(paginationLink) {
paginationLink.addEventListener('click', function() {
clearInterval(TCDintervaled);
ticodeCardCheck();
});
});
ticodeCardCheck();
let cartObserver = null;
let cartIconObserver = null;
let cartUpdateTimer = null;
function ticodeUpdateCartCurrency() {
document.querySelectorAll('.t706__cartwin-prodamount-currency').forEach(function(currencyElement) {
if (TCDMySymvol) {
currencyElement.textContent = '';
}
});
document.querySelectorAll('.t706__carticon-text .t706__cartwin-prodamount-currency').forEach(function(currencyElement) {
if (TCDMySymvol) {
currencyElement.textContent = '';
}
});
}
function scheduleCartUpdate() {
if (cartUpdateTimer) return;
cartUpdateTimer = setTimeout(() => {
cartUpdateTimer = null;
if (cartObserver) cartObserver.disconnect();
if (cartIconObserver) cartIconObserver.disconnect();
ticodeUpdateCartCurrency();
if (TCDcartWindow && cartObserver) {
cartObserver.observe(TCDcartWindow, { childList: true, subtree: true });
}
if (TCDcartIcon && cartIconObserver) {
cartIconObserver.observe(TCDcartIcon, { childList: true, subtree: true });
}
}, 80);
}
const TCDcartWindow = document.querySelector('.t706__cartwin-content');
if (TCDcartWindow) {
cartObserver = new MutationObserver(() => {
scheduleCartUpdate();
});
cartObserver.observe(TCDcartWindow, { childList: true, subtree: true });
}
const TCDcartIcon = document.querySelector('.t706__carticon-text');
if (TCDcartIcon) {
cartIconObserver = new MutationObserver(() => {
scheduleCartUpdate();
});
cartIconObserver.observe(TCDcartIcon, { childList: true, subtree: true });
}
scheduleCartUpdate();
document.addEventListener('input', function(e) {
if (e.target && e.target.classList && e.target.classList.contains('t706__cartwin-prodamount-input')) {
scheduleCartUpdate();
}
});
});
</script>
<script> (function TCDupdType() { const TildahtmlBclok = document.currentScript; if (TildahtmlBclok) { const recordElement = TildahtmlBclok.closest('.r[data-record-type]'); if (recordElement) { recordElement.setAttribute('data-record-type', Math.random().toString(36).substring(2, 12)); }}})(); </script>
КОПИРОВАТЬ КОД
Вторая часть кода (см. инструкцию)
<!--TICODE--><!-- Библиотека модификаций для Тильда https://ticode.dev -->
<!--TCD091-->
<script>
document.addEventListener('DOMContentLoaded', function() {
const TCDExchangeRate = 90;
const TCDMySymvol = false;
let TCDintervalId;
let TCDisPriceUpdated = false;
let TCDisSelectChanged = false;
const TCDInterval = 250;
function ticodeUpdatePrice() {
const TCDproduct = document.querySelector('.js-store-product');
const priceElem = TCDproduct.querySelector('.js-product-price');
const TCDcurrencyElem = TCDproduct.querySelector('.t-store__prod-popup__price-currency');
if (priceElem && TCDcurrencyElem) {
let tcdpriceText = priceElem.textContent.replace(/[^0-9,.]/g, '').replace(',', '.');
const tcpricestart = parseFloat(tcdpriceText);
if (!isNaN(tcpricestart)) {
const priceend = (tcpricestart * TCDExchangeRate).toFixed(0);
const ticurrentText = priceElem.textContent;
if (ticurrentText !== priceend) {
priceElem.textContent = priceend;
TCDisPriceUpdated = true;
}
if (TCDMySymvol) {
TCDcurrencyElem.textContent = '';
}
}
}
}
function ticodeStartPriceCheck() {
TCDintervalId = setInterval(() => {
if (TCDisPriceUpdated) {
clearInterval(TCDintervalId);
} else {
ticodeUpdatePrice();
}
}, TCDInterval);
}
ticodeStartPriceCheck();
document.querySelectorAll('.js-product-edition-option-variants').forEach(function(select) {
select.addEventListener('change', function() {
if (!TCDisSelectChanged) {
TCDisSelectChanged = true;
TCDisPriceUpdated = false;
ticodeUpdatePrice();
setTimeout(() => {
TCDisSelectChanged = false;
}, TCDInterval);
}
});
});
let cartObserver = null;
let cartIconObserver = null;
let cartUpdateTimer = null;
function ticodeUpdateCartCurrency() {
document.querySelectorAll('.t706__cartwin-prodamount-currency').forEach(function(currencyElement) {
if (TCDMySymvol) {
currencyElement.textContent = '';
}
});
document.querySelectorAll('.t706__carticon-text .t706__cartwin-prodamount-currency').forEach(function(currencyElement) {
if (TCDMySymvol) {
currencyElement.textContent = '';
}
});
}
function scheduleCartUpdate() {
if (cartUpdateTimer) return;
cartUpdateTimer = setTimeout(() => {
cartUpdateTimer = null;
if (cartObserver) cartObserver.disconnect();
if (cartIconObserver) cartIconObserver.disconnect();
ticodeUpdateCartCurrency();
if (TCDcartWindow && cartObserver) {
cartObserver.observe(TCDcartWindow, { childList: true, subtree: true });
}
if (TCDcartIcon && cartIconObserver) {
cartIconObserver.observe(TCDcartIcon, { childList: true, subtree: true });
}
}, 80);
}
const TCDcartWindow = document.querySelector('.t706__cartwin-content');
if (TCDcartWindow) {
cartObserver = new MutationObserver(() => {
scheduleCartUpdate();
});
cartObserver.observe(TCDcartWindow, { childList: true, subtree: true });
}
const TCDcartIcon = document.querySelector('.t706__carticon-text');
if (TCDcartIcon) {
cartIconObserver = new MutationObserver(() => {
scheduleCartUpdate();
});
cartIconObserver.observe(TCDcartIcon, { childList: true, subtree: true });
}
scheduleCartUpdate();
document.addEventListener('input', function(e) {
if (e.target && e.target.classList && e.target.classList.contains('t706__cartwin-prodamount-input')) {
scheduleCartUpdate();
}
});
});
</script>
<script> (function TCDupdType() { const TildahtmlBclok = document.currentScript; if (TildahtmlBclok) { const recordElement = TildahtmlBclok.closest('.r[data-record-type]'); if (recordElement) { recordElement.setAttribute('data-record-type', Math.random().toString(36).substring(2, 12)); }}})(); </script>
КОПИРОВАТЬ КОД
КОПИРОВАТЬ КОД
1. Создаем каталог тильда и загружаем в него товары(модификация не работает в с товарами которые загрузили в блок). Скрипт работает с блоками магазинов ST300, ST305N, ST310N, ST315N, ST320N. В настройках сайта устанавливаем основную валюту сайта.
2. В генераторе в поле "курс конвертации" указываем значение на которое будем умножать цену и выбираем тип корзины который используем на сайте. Если вы указали в каталоге цену 10 и поставили курс 10, то на сайте покажет цену 100. Если в каталоге у вас указано 100, а курс поставили 0.1, то на сайте покажет 10.
3. Копируем первый код и вставляем на страницу с каталогом в блок Т123. Блок с кодом размещаем под каталогом.
4. Создаем пустую страницу и вставляем на нее второй код в блок Т123. Эту страницу в настройках каталога назначаем шапкой товаров и ставим галочку "отображать popup карточку товара в виде отдельной страницы". Это нужно для того чтобы скрипт мог обновлять цену в самой карточке.
5. При необходимости можно вывести свой символ возле новой цены. Примечание! Вывод своего символа не меняет валюту оплаты. Если у вас на сайте основная валюта $, а в генераторе указали Rub, то в самой корзине будет показана конвертированная цена с приставкой Rub, но в платежку будет передана как $. Поэтому либо указывайте основную валюту ту в которую конвертируете цены, либо на стороне платёжных систем делайте дополнительные настройки.
Данная версия скрипта пока что не поддерживает конвертацию перечеркнутых цен, промокодов и скидок!