Skip to content

Отсчет дней до нового года

Думаю многим знаком новогодний скин 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>

Как его можно грамотно допилить?

post-30326-0-24753300-1416772503_thumb.jpg

Featured Replies

В таком виде никак. Сначала нужно рассчитать дату, потом склонять, а для этого, судя по всему, придется переписать скрипт.

<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);

  • Author

Заменил - в результате одни цифры с обратным отсчетом без текстовки.

  • Author

Прикрепление полной версии globaltemplate поможет решению проблемы?

Просто я раньше пробовал готовые скрипты, которые при добавлении в конец (перед закрывающими тегами) отрабатывали нормально, но конкретно в этом месте работать отказались.

Вторую часть тоже нужно заменить.

  • Author

А вторая часть скрипта в каком из шаблонов/файлов находится?

Этот скрипт состоит из двух частей. Первая часть - определение параметров, и вторая часть которая подключается из файла, обычно находится чуть ниже первой части (вы вообще смотрите что добавляете, а если там предлагается какой нибудь вредоносный файл подключить?). Вот в этом js файле нужно заменить код из второго блока.

  • Author

Смотрю конечно, но принцип обработки кода всё равно до конца не понимаю.

Ниже идет вызов этого файла, похоже как раз этого счетчика:

<script language="JavaScript" src="{$this->settings['img_url']}/js/countdown.js"></script>

То есть остальные правки в нём?

Да, в нем нужно заменить код из второго блока.

  • Author

Спасибо большое, всё работает отлично!

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.