Guess Timezone (Автоматическое определение часового пояса)

Поддержка старых модов или модов, созданных авторами не из нашего сообщества, а также любые вопросы, связанные с модами для phpBB 3.0.x, кроме относящихся к форуму Для авторов (phpBB 3.0.x).
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Garret_Dark
phpBB 2.0.16
Сообщения: 1097
Стаж: 17 лет 8 месяцев
Откуда: root/world/russia/
Благодарил (а): 126 раз
Поблагодарили: 206 раз

Re: Guess Timezone (Автоматическое определение часового пояс

Сообщение Garret_Dark »

Переход на зимнее время отменили. А народ дружно перешел на зимнее время благодаря данному моду (Кроме довольных Украинцев у которых переход действительно состоялся)).
Как бы сделать фильтр, чтобы пользователей из РФ и Беларуси оставалось "Летнее время"?
Аватара пользователя
Garret_Dark
phpBB 2.0.16
Сообщения: 1097
Стаж: 17 лет 8 месяцев
Откуда: root/world/russia/
Благодарил (а): 126 раз
Поблагодарили: 206 раз

Re: Guess Timezone (Автоматическое определение часового пояс

Сообщение Garret_Dark »

Возможно кто-то поможет разобраться с JS кодом.
Этот код в overall_header.html

Код: Выделить всё

<!-- IF U_TIME_COOKIE -->
	var january = (new Date((new Date()).getFullYear(), 1, 1)).getTimezoneOffset();
	var today = (new Date()).getTimezoneOffset();
	// we use January since DST usually isn't in effect during January
	document.cookie = '{U_TIME_COOKIE}_time[zone] = ' + (-january / 60);
	document.cookie = '{U_TIME_COOKIE}_time[dst] = ' + (january != today ? 1 : 0);
<!-- ENDIF -->
Этот в ucp_prefs_personal.html

Код: Выделить всё

<script type="text/javascript">
// <![CDATA[
	/**
	* Guess Timezone
	*/
	function guessTimezone()
	{
		var january = (new Date((new Date()).getFullYear(), 1, 1)).getTimezoneOffset();
		var today = (new Date()).getTimezoneOffset();
		// we use January since DST usually isn't in effect during January
		document.getElementById('timezone').value = -january / 60;
		document.getElementById('dst1').checked = january != today;
		document.getElementById('dst2').checked = january == today;
	}
// ]]>
</script>
Где-то в его недрах вычисляется летнее или зимнее время пользователя. Как я понял опытным путем это "january" отвечает за зимнее время.
В общем надо переработать код так, чтобы он всегда опредялял временную зону как летнее.

Знающие JS откликнитесь, плиз! :idea:
Аватара пользователя
Bumbox
phpBB 1.0.0
Сообщения: 7
Стаж: 17 лет 9 месяцев

Re: Guess Timezone (Автоматическое определение часового пояс

Сообщение Bumbox »

Подскажите форумчане, в инструкции по установке мода есть такой кусок:

Открыть: includes/session.php
Найти
Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.

Код: Выделить всё

if ((@include $this->lang_path
		{
			die('Language file '
		}
Добавить после
Подсказка: Добавьте эти строки с новой строки после ранее найденных строк.

Код: Выделить всё

switch (true)
		{
			case $this->data['user_id'] != ANONYMOUS && $this->data['use_browser']:
			case $this->data['user_id'] == ANONYMOUS && $config['use_client_browser']:
				if (isset($_COOKIE[$config['cookie_name'] . '_time']['dst']) && isset($_COOKIE[$config['cookie_name'] . '_time']['zone']))
				{
					$temp = $_COOKIE[$config['cookie_name'] . '_time']['zone'];
					if (!isset($lang['tz'][$temp]))
					{
						break;
					}
					$this->timezone = $temp * 3600;
					$this->dst = ((bool) $_COOKIE[$config['cookie_name'] . '_time']['dst']) * 3600;
				}
Так вот в этом файле нет таких строк в движке phpBB 3.0.10

Код: Выделить всё

if ((@include $this->lang_path
		{
			die('Language file '
		}
Куда этот кусок мода можно засунуть, чтоб работало?

P.S.
Все нашел на оффоруме, если переводчик не гонит, то надо искать не:

Код: Выделить всё

if ((@include $this->lang_path
		{
			die('Language file '
		}
а:

Код: Выделить всё

if ($include_result === false)
      {
         die('Language file ' . $this->lang_path . $this->lang_name . "/common.$phpEx" . " couldn't be opened.");
      }
P.S.2
Кстати и в сабсильвере2 тоже косяк по инструкции, но тут проще, сам нашел. Пора менять инструкцию... :mrgreen:
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 13158
Стаж: 15 лет 1 месяц
Благодарил (а): 236 раз
Поблагодарили: 3750 раз

Re: Guess Timezone (Автоматическое определение часового пояс

Сообщение Татьяна5 »

Garret_Dark писал(а):В общем надо переработать код так, чтобы он всегда опредялял временную зону как летнее.
Скорей зимнее. Летнее прибавляет час.

Открыть styles/prosilver/template/ucp_prefs_personal.html
Найти

Код: Выделить всё

<!-- INCLUDE ucp_header.html -->
Вставить после

Код: Выделить всё

<script type="text/javascript">
// <![CDATA[
	/**
	* Guess Timezone
	*/
	function guessTimezone()
	{
		var january = (new Date((new Date()).getFullYear(), 1, 1)).getTimezoneOffset();
		var august = (new Date((new Date()).getFullYear(), 7, 1)).getTimezoneOffset();
		var today = (new Date()).getTimezoneOffset();
		// we use January since DST usually isn't in effect during January
		document.getElementById('timezone').value = -january / 60;
		document.getElementById('dst0').checked = january == today;
		if (january !== august) {
		document.getElementById('dst1').checked = january != today;
		}
	}
// ]]>
</script>
Открыть styles/prosilver/template/overall_header.html
Найти

Код: Выделить всё

// ]]>
</script>
Вставить до (правка от Nekstati с прошлой страницы тоже добавлена)

Код: Выделить всё

<!-- IF U_TIME_COOKIE -->
	var now = new Date();
	var january = (new Date(now.getFullYear(), 1, 1)).getTimezoneOffset();
	var august = (new Date(now.getFullYear(), 7, 1)).getTimezoneOffset();
	var today = now.getTimezoneOffset();
	// we use January since DST usually isn't in effect during January
	now.setTime(now.getTime() + 1000 * 3600 * 24 * 365);
	document.cookie = '{U_TIME_COOKIE}_time[zone] = ' + (-january / 60) + '; expires=' + now.toGMTString();
	if (january !== august) {
	document.cookie = '{U_TIME_COOKIE}_time[dst] = ' + (january != today ? 1 : 0) + '; expires=' + now.toGMTString();
	}
<!-- ENDIF -->
timezone v1_0_1a.rar
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Вернуться в «Поддержка модов для phpBB 3.0.x»