Список при смене языка перестал изменятся
Добрый день! Дали в работу сайт с JS сгенерированом на CofeeScript 1.9.2
Я в JS не силен, сразу говорю. После изменения структуры расположения страниц в каталоге перестал меняться язык выпадающего меню (в остальном никаких проблем). Сам код исполняющий скрипт dropStreetsRus =[большой массив адресов] changeLanguage = function() { var OthBtn, SafBtn, changeDropDowns, href, setAttr; SafBtn = $("#Safari-lang"); OthBtn = $("#Other-lang"); href = $(location).attr('href'); $.getScript("/assets/js/min/detect-min.js", function() { var user; user = detect.parse(navigator.userAgent); if (user.browser.family === 'Safari') { $('#Safari-lang').addClass('is-active'); return $('.experience').addClass('is-Safari'); } else { return $('#Other-lang').addClass('is-active'); } }); setAttr = function(href) { SafBtn.attr('href', href); return OthBtn.attr('href', href); }; changeDropDowns = function() { dropStreets = dropStreetsRus; dropTrafficGeneral = dropTrafficGeneralRus; dropTrafficK1 = dropTrafficK1Rus; return dropTrafficK2 = dropTrafficK2Rus; }; if (href.indexOf('/rus/') > -1) { setAttr(href.replace('/rus', '')); } else { setAttr(href.splice(href.indexOf('/', 8), 0, '/rus')); } update_list('#dropdown-group-street', dropStreets); }; update_list = function(identificator, updater) { $(identificator + ' ul li').remove(); $.each(updater, function(index, updaterValue) { $(identificator + ' ul').append('<li class = "someClass">' + updaterValue + '</li>'); }); }; $(document).on('click', '.btn-group .dropdown-menu li', function(e) { var btn, btnGroup; e.preventDefault(); btnGroup = $(this).parents('.btn-group'); if (!($(this).hasClass('disable'))) { btn = btnGroup.find('.btn-dropdown'); btn.addClass('dropdown-selected'); btn.text($(this).text()); btn.append('<span class = "caret"> </span>'); btn.removeClass('dropdown-alert'); if (btnGroup.is('#dropdown-group-street')) { update_list('#dropdown-group-house', dropHouses[$('#dropdown-group-street li').index(this)]); } }); Выделил из файлы-скрипта основные моменты, которые, на мой взгляд, имеют отношение к этой функции. Если чего то не хватает - могу пошуршать код. |
Находясь на странице сайта открой консоль, посмотри какие возникли ошибки.
В хроме клавиша F12 (вкладка «console»). |
ошибок нет... просто скрипт перестал выполнятся. а ошибки я найти не могу :-?
|
Цитата:
|
Цитата:
setAttr(href.splice(href.indexOf('/', 8), 0, '/rus')); единственное не понятно за что отвечает 8 и 0 тут? Раньше страница со скриптом выводилась через /rus/internet.php теперь вложенность файла поменялась на 2 каталога /rus/content/services/internet.php а обычная версия находится в /content/services/internet.php Тоесть скрипт срабатывает, но не меняет язык как указанно в 23 строке dropStreets = dropStreetsRus; |
Цитата:
Цитата:
Цитата:
|
Цитата:
Проблема то в том что и на обычной и на русской версии сайта скрипт выполняется без ошибок, но не переводит массив dropStreets = dropStreetsRus; И как этого добиться без изменения самого скрипта я не знаю... |
Цитата:
но попробуйте заменить '/rus' на '/rus/content' |
Цитата:
Получается /rus/content/сontent/services/internet.php Может попробовать как-то привязать смену dropStreets на dropStreetsRus, например, при смене lang="ru" в шапке сайта? |
Все еще актуально. Могу дать полный скрипт. Может я не туда смотрю?
|
TyronNIKO, лучше сразу ссылку на сайт.
|
Цитата:
|
TyronNIKO,
<meta property="og:url" content="<br /> <b>Notice</b>: Undefined variable: siteUrl in <b>/usr/local/www/nginx-dist/www.cnm.ua/rus/includes/head.php</b> on line <b>27</b><br /> "> |
TyronNIKO,
файл "newfunctions.gulpfile.js" Попробуй заменить строки 72-76 этим: if (href.indexOf('/rus') > -1) { setAttr(href.replace('/rus/', '/')); } else { setAttr(href.splice(href.indexOf('/', 8), 0, '/rus')); changeDropDowns(); } |
TyronNIKO,
а если так if (href.indexOf('/rus') > -1) { setAttr(href.replace('/rus/', '/')); update_list('#dropdown-group-street', dropStreets); } else { setAttr(href.splice(href.indexOf('/', 8), 0, '/rus')); update_list('#dropdown-group-street', dropStreetsRus); } вместо if (href.indexOf('/rus') > -1) { setAttr(href.replace('/rus/', '/')); } else { setAttr(href.splice(href.indexOf('/', 8), 0, '/rus')); } update_list('#dropdown-group-street', dropStreets); |
Nexus,
:) |
рони, для смены языка на русский написана функция «changeDropDowns», если я правильно понял)
|
Nexus,
да и возможно где-то затёрт прежний вызов |
Цитата:
newfunctions.gulpfile.js:614 Uncaught SyntaxError: Unexpected token ) Пробовал ; ставить - то же самое |
Цитата:
|
Цитата:
замените блок целиком на это /*СМЕНА ЯЗЫКА*/ changeLanguage = function() { var OthBtn, SafBtn, changeDropDowns, href, setAttr; SafBtn = $("#Safari-lang"); OthBtn = $("#Other-lang"); href = $(location).attr('href'); $.getScript("/assets/js/min/detect-min.js", function() { var user; user = detect.parse(navigator.userAgent); if (user.browser.family === 'Safari') { $('#Safari-lang').addClass('is-active'); return $('.experience').addClass('is-Safari'); } else { return $('#Other-lang').addClass('is-active'); } }); setAttr = function(href) { SafBtn.attr('href', href); return OthBtn.attr('href', href); }; changeDropDowns = function() { dropStreets = dropStreetsRus; dropTrafficGeneral = dropTrafficGeneralRus; dropTrafficK1 = dropTrafficK1Rus; return dropTrafficK2 = dropTrafficK2Rus; }; if (href.indexOf('/rus') > -1) { setAttr(href.replace('/rus/', '/')); update_list('#dropdown-group-street', dropStreets); } else { setAttr(href.splice(href.indexOf('/', 8), 0, '/rus')); update_list('#dropdown-group-street', dropStreetsRus); } }; /*END-СМЕНА ЯЗЫКА*/ |
Один из случаев, когда без ящика не разберешь, как программист хотел сделать, чтобы это работало))
Можно после объявления массивов проверить присутствие '/rus/' в адресной строке, если фраза присутствует, то все массивы с данными на оригинальном языке перезаписываешь массивами RUS, в противном случае наоборот. Этот костыль наверняка поможет, однако это костыль. UPD. Не понимаю почему и я и Рони решили, что массивы с русскими наименованиями должны размещаться в блоке else условия, ведь условие читается так: «если в строке адреса присутствует "/rus" то...» Попробуй сделать так: if (href.indexOf('/rus') > -1) { setAttr(href.replace('/rus/', '/')); changeDropDowns(); } else { setAttr(href.splice(href.indexOf('/', 8), 0, '/rus')); } |
Цитата:
Я действительно через-чур конкретно "заменял"... в конце ведь должно выполнятся update_list('#dropdown-group-street', dropStreets); ...и уже после него должен стоять }; а я лепил прямо после указанной части! В общем все работает! Огромное спасибо за помощь! |
Часовой пояс GMT +3, время: 21:03. |