Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Опубликовано:

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

Рекомендованные сообщения

Опубликовано:

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

Опубликовано:

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

Опубликовано:
  • Автор

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

Опубликовано:
  • Автор

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

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

Опубликовано:

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

Опубликовано:
  • Автор

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

Опубликовано:

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

Опубликовано:
  • Автор

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

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

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

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

Опубликовано:

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

Опубликовано:
  • Автор

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

Создайте аккаунт или войдите в него для комментирования

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

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.