Смена языка на сайте
Здравствуйте.
Подскажите пожалуйста как сделать приключение языков. Сейчас разбил по каталогам для разных языков в таком виде: https://stock.ck.ua/ru/catalog/7451362/ https://stock.ck.ua/ua/catalog/7451362/ Но теперь не могу понять как реализовать переключении между /ru/ и /ua/ а оставшийся путь не менялся. Подскажите пожалуйста как сделать ? |
смена языка ru/ua
wemon,
добавить на обе страницы.
<!DOCTYPE html>
<html >
<head ></head>
<body><select class="lang">
<option value="ru">ru</option>
<option value="ua">ua</option>
</select>
</body>
<script>
document.addEventListener("DOMContentLoaded", () => {
const select = document.querySelector(".lang");
let url = window.location.href, value;
for ({
value
} of select.options) {
if (value && url.includes(value, 19)) {
select.value = value;
}
};
select.addEventListener("change", _ => {
if(!select.value) return;
url = `https://stock.ck.ua/${select.value}/catalog/7451362/`;
window.location.href = url;
})
});
</script>
</html>
|
Спасибо добавил. Но почему-то срабатывает один раз. Потом на этой же странице нельзя переключить обратно.
|
Цитата:
|
Все работает. Можете также подсказать сейчас попробовал вставить в другой каталог https://stock.ck.ua/ua/catalog/7451363/ он перенаправляется /catalog/7451362/
Как сделать ${select.value}/catalog/7451362/`; что бы путь менялся в зависимости от текущей ссылки. То есть чтобы заменялась только та часть ссылки /ru/ и /ua/ |
wemon,
пробуйте ...
<!DOCTYPE html>
<html >
<head ></head>
<body><select class="lang">
<option value="ru">ru</option>
<option value="ua">ua</option>
</select>
</body>
<script>
document.addEventListener("DOMContentLoaded", () => {
const select = document.querySelector(".lang");
let url = window.location.href, value, reg;
for ({ value } of select.options) {
reg = new RegExp(`/${value}/`);
if (value && reg.test(url)) {
select.value = value;
break;
}
};
select.addEventListener("change", _ => {
if(!select.value) return;
url = url.replace(reg, `/${select.value}/`);
window.location.href = url;
})
});
</script>
</html>
|
Последний вариант, срабатывает один раз на странице. Потом не переключает.
|
wemon,
break забыл добавить. скопируйте снова #6 |
рони,
Спасибо Вам большое. Все работает. |
рони,
Здравствуйте можете пожалуйста помочь с другим вариантом, только уже для ссылочного переключателя по аналогу как для select. Сейчас сделал переключатель ссылками (УКР | РУС) для 2-х страниц, вот пример: https://stock.ck.ua/ru/catalog/ Для разных страниц на которых находишься выводится по разному: Если на Русской версии: <ul class="lang-switcher"> <li class="lang-ua"><a href="/ua/catalog/">УКР</a></li> <li class="lang-ru"><span>РУС</span></li> </ul> Если на Украинской версии: <ul class="lang-switcher"> <li class="lang-ua"><span>УКР</span></li> <li class="lang-ru"><a href="/ru/catalog/">РУС</a></li> </ul> Подскажите как реализовать это для всех страниц сайта? |
wemon,
document.addEventListener('DOMContentLoaded', () => {
const lang = document.querySelector(".lang-switcher");
lang.addEventListener("click", event => {
let href = event.target.getAttribute('href');
if (href) {
event.preventDefault();
let value = href.match(/[^\/]+/g)[1];
let url = window.location.href;
let reg = new RegExp(`\/[^\/]+\/${value}\/`);
url = url.replace(reg, href);
window.location.href = url;
}
})
});
|
рони,
Подскажите что я сделал не так? Мне нужно убрать ссылки ? <ul class="lang-switcher"> <li class="lang-ua"><a href="">УКР</a></li> <li class="lang-ru"><span>РУС</span></li> </ul> |
рони,
Ссылка получается сейчас ведет сама на себя без смены пути с /ru/ на /ua/ |
Цитата:
|
рони,
Можете подсказать как это сделать для всех страниц сайта ? Сейчас работает только на: https://stock.ck.ua/ru/catalog/ https://stock.ck.ua/ua/catalog/ Для других страниц не получается переключать https://stock.ck.ua/ua/delivery/ https://stock.ck.ua/ru/delivery/ https://stock.ck.ua/ua/contacts/ https://stock.ck.ua/ru/contacts/ |
Цитата:
на delivery ссылка delivery на /contacts/ ссылка /contacts/ а не catalog/ везде |
wemon,
с нормальными ссылками и скрипт не нужен будет. |
рони,
Цитата:
Так как страниц будет много. Я в посте #10 я указал что нужно для всех страниц сайта. Может Вы меня не так поняли просто. То есть сделать одно решение для переключения между /ru/ на /ua/ в середине ссылки. |
рони,
Да и меню вывел отдельно, выводится из отдельного файла чтобы в случае добавления каких то пунктов меню сделать в одном месте. И переключатель языка в нем. Так как будут страницы помимо меню нужно одно решение. Если делать ссылками то потом придётся исправлять везде где наделал их. |
wemon,
если сложно сделать ссылки на сервере, то можно так ...
document.addEventListener('DOMContentLoaded', () => {
let ru = document.querySelector(".lang-switcher .lang-ru a");
let ua = document.querySelector(".lang-switcher .lang-ua a");
let value = window.location.href.match(/[^\/]+/g).pop();
let url = `/ru/${value}/`;
if (ua) {
url = `/ua/${value}/`;
ua.setAttribute('href', url);
}
if (ru) ru.setAttribute('href', url);
});
|
wemon,
href не прописывайте изначально, копируйте скрипт после обновления этой страницы. |
рони,
Цитата:
Что я делаю не так? для каждого языка свой вывод - navbar navbar-ru.php
<ul class="lang-switcher">
<li class="lang-ua"><a href="">УКР</a></li>
<li class="lang-ru"><span>РУС</span></li>
</ul>
navbar-ua.php
<ul class="lang-switcher">
<li class="lang-ua"><span>УКР</span></li>
<li class="lang-ru"><a href="">РУС</a></li>
</ul>
Добавил для всех страниц.
document.addEventListener('DOMContentLoaded', () => {
let ru = document.querySelector(".lang-switcher .lang-ru a");
let ua = document.querySelector(".lang-switcher .lang-ua a");
let value = window.location.href.match(/[^\/]+/g).pop();
let url = `/ru/${value}/`;
if (ua) {
url = `/ru/${value}/`;
ua.setAttribute('href', url);
}
if (ru) ru.setAttribute('href', url);
});
Что делаю не так ? |
Цитата:
Цитата:
|
wemon,
ок норма. |
рони,
Спасибо Вам большое. |
Цитата:
|
рони,
Цитата:
Этот вариант который сделали Вы, меня тоже вполне устраивает. Но Ваш совет возьму на заметку. Спасибо. |
Подскажите пожалуйста как записать в переменные вот эти значения data-amount и data-price?https://sun9-57.userapi.com/impg/d52...a04&type=album
|
Никита Соболев,
создайте свою тему в https://javascript.ru/forum/misc/ и лучше код, чем картинка. читать Нестандартные атрибуты, dataset Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [html run] ... минимальный код страницы с вашей проблемой [/html] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
Цитата:
|
Здравствуйте!
Как можно сделать ссылочный переключатель для общего меню ru/en? site.ru/ru/ site.ru/en/ И как оставить только одну ссылку на странице, на русской версии EN и на английской RU? Как правильно обернуть, чтобы прописать стили? |
Страницы 2. Вот пускай на каждой и будет своя ссылка.
|
Цитата:
|
Что значит в одном. В браузер передается одна страница. У нее и хидер и тело и футер индивидуальные.
Если у вас страница генерится сервером, пускай он ставит нужную ссылку в хидере при его генерации. Если вы формируете страницу в браузере, то опять таки поставьте одну нужную ссылку. |
Это вывод мобильного меню:
<div class="mobile-nav"> <span class="mob-nav-btn"><?php echo pex_text (pll__('_menu_text')); ?></span> </div> Это вывод переключателя языков: <?php pll_the_languages( array( 'hide_current'=>1 ,'show_names' => 0 ) ); ?> Как объединить их вместе, чтобы не развалился макет? Если, например вот так, то макет разваливается: <div class="lang"> <?php pll_the_languages( array( 'hide_current'=>1 ,'show_names' => 0 ) ); ?> </div> <div class="mobile-nav"> <span class="mob-nav-btn"><?php echo pex_text (pll__('_menu_text')); ?></span> </div> И для "lang" нужны свои стили(( |
Стилями остальные элементы подогнала, сойдёт в общем...
У меня есть вопрос по лайтбоксу. Это новую тему создавать нужно? |
elena777,
Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [html run] ... минимальный код страницы с вашей проблемой [/html] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
Тот код уже, кое-как допилила.)
У меня этот не хочет работать. По идее он должен изменять размер окна лайтбокса с учетом адресной строки мобильного браузера. То есть, при прокрутке вверх и скрытии адресной строки, лайтбокс должен занимать всю высоту окна браузера, но по факту внизу остается пустое место по высоте этой самой строки: <script> jQuery(window).resize(function() { if (typeof jQuery().fullscreen !== 'undefined') { if (jQuery.isFunction(jQuery().fullscreen)) { if (!jQuery.fullscreen.isFullScreen()) { bwg_popup_resize(); } } } }); </script> И еще беда в том, что воспроизвести эту проблему на компе не получается |
| Часовой пояс GMT +3, время: 12:46. |