Как автоматически обновлять ссылки для смены языка на сайте Tilda?
С помощью этой модификации можно автоматически обновлять ссылки на языковые версии в блоке ME601A. Достаточно добавить языковые коды в меню и скрипт сам будет формировать корректные ссылки, перенаправляя пользователей на соответствующую языковую версию страницы. Дополнительно можно скрывать текущий язык из списка.
Этот генератор кода доступен только тем кто оплатил подписку
<!--TICODE--><!-- Библиотека модификаций для Тильда https://ticode.dev -->
<!--TCD000--><script>
document.addEventListener("DOMContentLoaded", function() {
setTimeout(function() {
const TCDlangMenu = document.querySelectorAll(".uc-lang .t966__menu-link");
if (!TCDlangMenu.length) return;
const TCDAlloLang = "en, it".split(", ");
const TCDDefLang = "ru";
const TCDMod = false;
let Ti103 = window.location.pathname.replace(/\/$/, "");
let TCDAutoLang = TCDDefLang;
let TCDLg = Ti103;
const URLTiSegments = Ti103.split("/");
const URlTilastSegment = URLTiSegments[URLTiSegments.length - 1];
if (TCDAlloLang.includes(URlTilastSegment)) {
TCDAutoLang = URlTilastSegment;
URLTiSegments.pop();
TCDLg = URLTiSegments.join("/") || "/";
}
TCDlangMenu.forEach(item => {
let href = item.getAttribute("href").trim();
let langTildaCode = href.replace("/", "");
let newTiCodesHref = "";
if (TCDAlloLang.includes(langTildaCode)) {
newTiCodesHref = TCDLg + "/" + langTildaCode;
} else if (langTildaCode === TCDDefLang) {
newTiCodesHref = TCDLg === "" ? "/" : TCDLg;
}
if (newTiCodesHref.charAt(0) !== "/") {
newTiCodesHref = "/" + newTiCodesHref;
}
item.setAttribute("href", newTiCodesHref);
});
if (TCDMod) {
setTimeout(function() {
TCDlangMenu.forEach(item => {
let href = item.getAttribute("href").trim();
if (href === Ti103) {
let rowTC = item.closest(".t966__menu-list-row");
if (rowTC) {
rowTC.remove();
}
}
});
}, 300);
}
}, 100);
});
</script>
<style>
.uc-lang .t966__menu-item-title {
margin-top: 7px;
}
</style>
<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. Создаем блок ME601A в хедере или футере и присваиваем класс uc-lang Чтобы добавить класс блоку, заходим в настройки блока и сверху от id блока будет кнопка "Добавить CSS Class Name"
2. Указываем в меню ME601A список доступных языков (важно, чтобы для них уже были созданы страницы). Например, если на сайте 3 языка русский (основной), английский и итальянский, то для главной страницы должны быть такие страницы: https://site.com – RU (основной язык) https://site.com/en – EN https://site.com/it – IT В блоке ME601A добавляем три пункта (Ru, En, It) и в ссылках пишем /ru, /en, /it.
3. В генераторе в поле "Язык по умолчанию" указываем язык который будет по умолчанию. Например, в нашем случае это RU. В ссылке мы указывали /ru, значит в генератор указываем ru
4 В поле "Список языков на сайте" указываем через запятую остальные языки кроме главного, в формате en, it. Важно! названия должны совпадать ссылками которые указывали в контенте (изначально указывали /en и /it).
4. При необходимости указываем дополнительные настройки в генераторе: Текущий язык в списке - если включить, то текущий язык будет скрыт из списка. Например, на странице https://site.com/contact/it язык It будет скрыт м меню ME601A.
5. Копируем код и вставляем HTM блок Т123. Блок с кодом размещаем под блоком ME601A. Ссылку открытия ME601A назначаем на любой элемент который должен открывать меню и публикуем все страницы.
Как работает скрипт: Скрипт проверяет URL и автоматически обновляет ссылки в ME601A. Если в адресе есть /en или /it, в меню создаются ссылки с этими языковыми кодами. Если языковой приставки нет, страница считается основной (ru), а в меню ME601A в пункте RU создается ссылка без приставки.