q0p 0 11/23/14 19:57 Думаю многим знаком новогодний скин White Christmas.Хотелось бы имеющийся в нем счетчик нормально русифицировать (т.е. сделать нормальное склонение дней (дня, день), часов, минут и секунд).В самом шаблоне вот такой код.<script language="JavaScript"> TargetDate = "01/01/2015 00:00"; BackColor = ""; ForeColor = "#000000"; CountActive = true; CountStepper = -1; LeadingZero = true; DisplayFormat = "<b>До Нового года осталось</b> %%D%% Дней, %%H%% Часов, %%M%% Минут, %%S%% Секунд <b></b>"; FinishMessage = "<b>Ураааа! С Новым годом, товарищи!</b>"; </script>Как его можно грамотно допилить? Поделиться сообщением Ссылка на сообщение
siv1987 2627 11/23/14 20:10 В таком виде никак. Сначала нужно рассчитать дату, потом склонять, а для этого, судя по всему, придется переписать скрипт. Поделиться сообщением Ссылка на сообщение
siv1987 2627 11/23/14 21:04 <script type='text/javascript'> TargetDate = "01/01/2015 00:00"; BackColor = ""; ForeColor = "#000000"; CountActive = true; CountStepper = -1; LeadingZero = true; Decline = true; DisplayFormat = "<b>До Нового года осталось</b> %%D%%, %%H%%, %%M%%, %%S%%"; FinishMessage = "<b>Ураааа! С Новым годом, товарищи!</b>"; </script> function declOfNum(number, type){ type = type.toUpperCase(); var declin ={ D: ['день', 'дня', 'дней'], H: ['час', 'часа', 'часов'], M: ['минута', 'минуты', 'минут'], S: ['секунда', 'секунды', 'секунд'], }; var cases = [2, 0, 1, 1, 1, 2]; return declin[type][ (number%100 > 4 && number%100 < 20) ? 2 : cases[(number%10 < 5) ? number%10 : 5] ]; } function calcage(secs, num1, num2, type) { var s = ((Math.floor(secs/num1))%num2).toString(); if (LeadingZero && s.length < 2){ s = "0"+s; } return "<b>"+s+"</b>"+((Decline && type) ? ' '+declOfNum(parseInt(s), type) : ''); } function CountBack(secs) { if (secs < 0) { document.getElementById("cntdwn").innerHTML = FinishMessage; return; } var DisplayStr; DisplayStr = DisplayFormat.replace(/%%D%%/g, calcage(secs,86400,100000, 'D')); DisplayStr = DisplayStr.replace(/%%H%%/g, calcage(secs,3600,24, 'H')); DisplayStr = DisplayStr.replace(/%%M%%/g, calcage(secs,60,60, 'M')); DisplayStr = DisplayStr.replace(/%%S%%/g, calcage(secs,1,60, 'S')); document.getElementById("cntdwn").innerHTML = DisplayStr; if (CountActive){ setTimeout("CountBack(" + (secs+CountStepper) + ")", SetTimeOutPeriod); } } function putspan(backcolor, forecolor) { document.write("<span id='cntdwn' style='background-color:"+backcolor+"; color:"+forecolor+ "'></span>"); } var defaultValues = { BackColor: "white", ForeColor: "black", TargetDate: "1/1/2015 00:00", DisplayFormat: "%%D%%, %%H%%, %%M%%, %%S%%.", CountActive: true, FinishMessage: "Happy new year, anchousi! (.)(.)", CountStepper: -1, LeadingZero: true, Decline: true, }; for(var key in defaultValues){ if(typeof(window[key]) == "undefined"){ window[key] = defaultValues[key]; } } CountStepper = Math.ceil(CountStepper); if (CountStepper == 0) CountActive = false; var SetTimeOutPeriod = (Math.abs(CountStepper)-1)*1000 + 990; putspan(BackColor, ForeColor); var dthen = new Date(TargetDate); var dnow = new Date(); if(CountStepper > 0) ddiff = new Date(dnow-dthen); else ddiff = new Date(dthen-dnow); gsecs = Math.floor(ddiff.valueOf() / 1000); CountBack(gsecs); 1 Поделиться сообщением Ссылка на сообщение
q0p 0 11/24/14 10:24 Заменил - в результате одни цифры с обратным отсчетом без текстовки. Поделиться сообщением Ссылка на сообщение
q0p 0 11/24/14 10:26 Прикрепление полной версии globaltemplate поможет решению проблемы?Просто я раньше пробовал готовые скрипты, которые при добавлении в конец (перед закрывающими тегами) отрабатывали нормально, но конкретно в этом месте работать отказались. Поделиться сообщением Ссылка на сообщение
siv1987 2627 11/24/14 10:27 Вторую часть тоже нужно заменить. Поделиться сообщением Ссылка на сообщение
q0p 0 11/24/14 10:31 А вторая часть скрипта в каком из шаблонов/файлов находится? Поделиться сообщением Ссылка на сообщение
siv1987 2627 11/24/14 10:37 Этот скрипт состоит из двух частей. Первая часть - определение параметров, и вторая часть которая подключается из файла, обычно находится чуть ниже первой части (вы вообще смотрите что добавляете, а если там предлагается какой нибудь вредоносный файл подключить?). Вот в этом js файле нужно заменить код из второго блока. Поделиться сообщением Ссылка на сообщение
q0p 0 11/24/14 10:42 Смотрю конечно, но принцип обработки кода всё равно до конца не понимаю.Ниже идет вызов этого файла, похоже как раз этого счетчика:<script language="JavaScript" src="{$this->settings['img_url']}/js/countdown.js"></script>То есть остальные правки в нём? Поделиться сообщением Ссылка на сообщение
siv1987 2627 11/24/14 10:42 Да, в нем нужно заменить код из второго блока. Поделиться сообщением Ссылка на сообщение
q0p 0 11/24/14 11:33 Спасибо большое, всё работает отлично! Поделиться сообщением Ссылка на сообщение