BB3CountDown - добавление счётчика до какого-то события

Как добавить счётчик до "Нового года осталось", счётчик дней, отсчёт до события, праздника и т.д.

Небольшие моды и хаки для форума phpBB3
Правила форума
При размещении мода/статьи взятой с другого форума/сайта обязательно необходимо указывать первоисточник сообщения.
 • Просмотры: 4764
Аватара пользователя
PPK
Администратор
Благодарил (а): 82 раза
Поблагодарили: 1621 раз
Сообщения: 10284
Зарегистрирован: 21 мар 2009, 17:13
Сообщение

BB3CountDown - добавление счётчика до какого-то события

14 фев 2011, 16:49

Мод позволяет добавить счётчик обратного отсчёта на станицу форума phpBB3, отображать время до наступления указанного события (с точностью от секунд до дней), отображать сообщение после наступления события, скриншоты:
адм. раздел

отображение счётчика до наступления события

отображение счётчика после наступления события

BB3CountDown.zip
Скачать архив, распаковать, заменить файлы трекера файлами из архива, JS код мода основан на скрипте jQuery - countdown (http://www.texotela.co.uk/code/jquery/countdown/).
Для работы мода так же необходимо подключение библиотеки jQuery.

В phpmyadmin выполнить:

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

INSERT INTO `phpbb_config` (`config_name`, `config_value`, `is_dynamic`) VALUES ('ppkbb_countdown_precision', 's', '0'); 
INSERT INTO `phpbb_config` (`config_name`, `config_value`, `is_dynamic`) VALUES ('ppkbb_countdown_prefix', '', '0');
INSERT INTO `phpbb_config` (`config_name`, `config_value`, `is_dynamic`) VALUES ('ppkbb_countdown_suffix', '', '0'); 
INSERT INTO `phpbb_config` (`config_name`, `config_value`, `is_dynamic`) VALUES ('ppkbb_countdown_passed', '', '0');
INSERT INTO `phpbb_config` (`config_name`, `config_value`, `is_dynamic`) VALUES ('ppkbb_countdown_start', '', '0');
INSERT INTO `phpbb_config` (`config_name`, `config_value`, `is_dynamic`) VALUES ('ppkbb_countdown_end', '', '0');
/language/ru/acp/board.php перед добавить

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

	//PPK CD
	'ACP_PPKBB_COUNTDOWN' => 'Обратный отсчёт',
	'ACP_PPKBB_COUNTDOWN_EXPLAIN' => '',
	'PPKBB_COUNTDOWN_PRECISION' => 'Точность измерения',
	'PPKBB_COUNTDOWN_PRECISION_EXPLAIN' => 'Точность обратного отсчёта, s - до секунд, m - до минут, h - до часов, d - до дней',
	'PPKBB_COUNTDOWN_END' => 'Дата окончания показа сообщения о наступившем событии',
	'PPKBB_COUNTDOWN_END_EXPLAIN' => '(в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС, 0 или пустая строка - отображать всегда)',
	'PPKBB_COUNTDOWN_START' => 'Дата события',
	'PPKBB_COUNTDOWN_START_EXPLAIN' => '(в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС)',
	'PPKBB_COUNTDOWN_PREFIX' => 'Префикс сообщения в счётчике обратного отсчёта',
	'PPKBB_COUNTDOWN_PREFIX_EXPLAIN' => '(до 255 символов, можно использовать html код)',
	'PPKBB_COUNTDOWN_SUFFIX' => 'Суффикс сообщения в счётчике обратного отсчёта',
	'PPKBB_COUNTDOWN_SUFFIX_EXPLAIN' => '(до 255 символов, можно использовать html код)',
	'PPKBB_COUNTDOWN_PASSED' => 'Сообщение отображаемое при наступлении события',
	'PPKBB_COUNTDOWN_PASSED_EXPLAIN' => '(до 255 символов, можно использовать html код)',
	//PPK CD
/includes/functions.php перед

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

	// The following assigns all _common_ variables that may be used at any point in a template.
	$template->assign_vars(array(
добавить

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

	//PPK CD
	$dt=time();
	$ppkbb_countdown_passed=$ppkbb_countdown_prefix=$ppkbb_countdown_suffix=$ppkbb_countdown_start=$ppkbb_countdown_end='';
	$ppkbb_countdown_precision=in_array($config['ppkbb_countdown_precision'], array('s', 'm', 'h', 'd')) ? $config['ppkbb_countdown_precision'] : 's';
	if($config['ppkbb_countdown_start'])
	{
		$ppkbb_countdown_start_dt=my_split_config($config['ppkbb_countdown_start'], 2, 'strval', ' ');
		$ppkbb_countdown_start_date=my_split_config($ppkbb_countdown_start_dt[0], 3, 'my_int_val', '-');
		$ppkbb_countdown_start_time=my_split_config($ppkbb_countdown_start_dt[1], 3, 'my_int_val', ':');
		if(checkdate($ppkbb_countdown_start_date[1], $ppkbb_countdown_start_date[2], $ppkbb_countdown_start_date[0]) && my_checktime($ppkbb_countdown_start_time[0], $ppkbb_countdown_start_time[1], $ppkbb_countdown_start_time[2]))
		{
			if(mktime(intval($ppkbb_countdown_start_time[0]), intval($ppkbb_countdown_start_time[1]), intval($ppkbb_countdown_start_time[2]), intval($ppkbb_countdown_start_date[1]), intval($ppkbb_countdown_start_date[2]), intval($ppkbb_countdown_start_date[0])) < $dt)
			{
				$ppkbb_countdown_passed=htmlspecialchars_decode($config['ppkbb_countdown_passed']);
			}
			else
			{
				$ppkbb_countdown_prefix=htmlspecialchars_decode($config['ppkbb_countdown_prefix']);
				$ppkbb_countdown_suffix=htmlspecialchars_decode($config['ppkbb_countdown_suffix']);
				$ppkbb_countdown_start="{$ppkbb_countdown_start_date[0]}, ".($ppkbb_countdown_start_date[1]-1).", {$ppkbb_countdown_start_date[2]}, {$ppkbb_countdown_start_time[0]}, {$ppkbb_countdown_start_time[1]}, {$ppkbb_countdown_start_time[2]}";
			}
			if($config['ppkbb_countdown_end'])
			{
				$ppkbb_countdown_end_dt=my_split_config($config['ppkbb_countdown_end'], 2, 'strval', ' ');
				$ppkbb_countdown_end_date=my_split_config($ppkbb_countdown_end_dt[0], 3, 'my_int_val', '-');
				$ppkbb_countdown_end_time=my_split_config($ppkbb_countdown_end_dt[1], 3, 'my_int_val', ':');
				if(checkdate($ppkbb_countdown_end_date[1], $ppkbb_countdown_end_date[2], $ppkbb_countdown_end_date[0]) && my_checktime($ppkbb_countdown_end_time[0], $ppkbb_countdown_end_time[1], $ppkbb_countdown_end_time[2]))
				{
					if(mktime(intval($ppkbb_countdown_end_time[0]), intval($ppkbb_countdown_end_time[1]), intval($ppkbb_countdown_end_time[2]), intval($ppkbb_countdown_end_date[1]), intval($ppkbb_countdown_end_date[2]), intval($ppkbb_countdown_end_date[0])) < $dt)
					{
						$ppkbb_countdown_passed=$ppkbb_countdown_start='';
					}
					else
					{
						$ppkbb_countdown_passed=htmlspecialchars_decode($config['ppkbb_countdown_passed']);
						$ppkbb_countdown_start="{$ppkbb_countdown_start_date[0]}, ".($ppkbb_countdown_start_date[1]-1).", {$ppkbb_countdown_start_date[2]}, {$ppkbb_countdown_start_time[0]}, {$ppkbb_countdown_start_time[1]}, {$ppkbb_countdown_start_time[2]}";
					}
				}
			}
			else
			{
				$ppkbb_countdown_passed=htmlspecialchars_decode($config['ppkbb_countdown_passed']);
				$ppkbb_countdown_start="{$ppkbb_countdown_start_date[0]}, ".($ppkbb_countdown_start_date[1]-1).", {$ppkbb_countdown_start_date[2]}, {$ppkbb_countdown_start_time[0]}, {$ppkbb_countdown_start_time[1]}, {$ppkbb_countdown_start_time[2]}";
			}
		}
	}
	//PPK CD
после

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

	// The following assigns all _common_ variables that may be used at any point in a template.
	$template->assign_vars(array(
добавить

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

		//PPK CD
		'S_COUNTDOWN_PASSED' => str_replace("'", '"', $ppkbb_countdown_passed),
		'S_COUNTDOWN_PREFIX' => str_replace("'", '"', $ppkbb_countdown_prefix),
		'S_COUNTDOWN_SUFFIX' => str_replace("'", '"', $ppkbb_countdown_suffix),
		'S_COUNTDOWN_PRECISION' => $ppkbb_countdown_precision,
		'S_COUNTDOWN_START' => $ppkbb_countdown_start,
		'S_COUNTDOWN_END' => $ppkbb_countdown_end,
		//PPK CD
найти

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

function my_split_config($config, $count=0, $type=false, $split='')
если указанная строка не найдена, перед

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

/**
* Set dynamic config value with arithmetic operation.
*/
добавить

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

function my_split_config($config, $count=0, $type=false, $split='')
{
	$count=intval($count);
	$s_config=$count > 0 ? @explode($split ? $split : ' ', $config, $count) : @explode($split ? $split : ' ', $config);
	$count=$count > 0 ? $count : sizeof($s_config);
	if($count)
	{
		for($i=0;$i<$count;$i++)
		{
			if($type)
			{
				if(is_array($type) && @function_exists(@$type[$i]))
				{
					$s_config[$i]=call_user_func($type[$i], @$s_config[$i]);
				}
				else if(@function_exists($type))
				{
					$s_config[$i]=call_user_func($type, @$s_config[$i]);
				}
				else
				{
					$s_config[$i]=@$s_config[$i];
				}
			}
			else
			{
				$s_config[$i]=@$s_config[$i];
			}
		}
	}

	return $s_config;
}
найти

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

function my_int_val($v=0)
если указанная строка не найдена, перед

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

/**
* Set dynamic config value with arithmetic operation.
*/
добавить

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

function my_int_val($v=0)
{
	if(!$v || $v < 0)
	{
		return 0;
	}

	return @number_format($v, 0, '', '');
}
перед

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

/**
* Set dynamic config value with arithmetic operation.
*/
добавить

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

function my_checktime($h, $m, $s)
{

	if(!is_numeric($h) || !is_numeric($m) || !is_numeric($s))
	{
		return false;
	}

	if($h > -1 && $h < 24 && $m > -1 && $m < 60 && $s > -1 && $s < 60)
	{
		return true;
	}

	return false;
}
/includes/acp/acp_board.php после

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

'load_cpf_viewtopic'	=> array('lang' => 'LOAD_CPF_VIEWTOPIC',	'validate' => 'bool',	'type' => 'radio:yes_no', 'explain' => false),
добавить

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

						//PPK CD
						'legend4'					=> 'ACP_PPKBB_COUNTDOWN',
						'ppkbb_countdown_start'		=> array('lang' => 'PPKBB_COUNTDOWN_START',		'validate' => 'string',	'type' => 'text:19:19', 'explain' => true),
						'ppkbb_countdown_end'		=> array('lang' => 'PPKBB_COUNTDOWN_END',		'validate' => 'string',	'type' => 'text:19:19', 'explain' => true),
						'ppkbb_countdown_prefix'		=> array('lang' => 'PPKBB_COUNTDOWN_PREFIX',		'validate' => 'string',	'type' => 'text:48:255', 'explain' => true),
						'ppkbb_countdown_suffix'		=> array('lang' => 'PPKBB_COUNTDOWN_SUFFIX',		'validate' => 'string',	'type' => 'text:48:255', 'explain' => true),
						'ppkbb_countdown_passed'		=> array('lang' => 'PPKBB_COUNTDOWN_PASSED',		'validate' => 'string',	'type' => 'text:48:255', 'explain' => true),
						'ppkbb_countdown_precision'		=> array('lang' => 'PPKBB_COUNTDOWN_PRECISION',		'validate' => 'string',	'type' => 'text:1:1', 'explain' => true),
						//PPCD
/styles/prosilver/template/overall_header.html перед добавить

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

<!-- PPK CD -->
<!-- IF S_COUNTDOWN_START -->
<script src="{ROOT_PATH}tracker/addons/js/jquery.countdown.js" type="text/javascript"></script>
<script type="text/javascript">
// <![CDATA[
	 jQuery(document).ready(
		function($)
		{
			var now = new Date();
			var endingSoon = new Date({S_COUNTDOWN_START});
			$("#ppkbb_countdown").countdown(endingSoon,
				{
					precision: '{S_COUNTDOWN_PRECISION}',
					prefix: '{S_COUNTDOWN_PREFIX}',
					suffix: '{S_COUNTDOWN_SUFFIX}',
					passed: '{S_COUNTDOWN_PASSED}'
				}
			);
		}
	);
// ]]>
</script>		
<!-- ENDIF -->
<!-- PPK CD -->
после

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

		<!-- IF S_BOARD_DISABLED and S_USER_LOGGED_IN and (U_MCP or U_ACP) -->
		<div id="information" class="rules">
			<div class="inner"><span class="corners-top"><span></span></span>
				<strong>{L_INFORMATION}:</strong> {L_BOARD_DISABLED}
			<span class="corners-bottom"><span></span></span></div>
		</div>
		<!-- ENDIF -->
добавить

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

<!-- PPK CD -->
<!-- IF S_COUNTDOWN_START -->
	<div class="panel">
		<div class="inner"><span class="corners-top"><span></span></span>
			<div id="ppkbb_countdown" style="text-align:center;"></div>
		<span class="corners-bottom"><span></span></span></div>
	</div>
<!-- ENDIF -->
<!-- PPK CD -->
/styles/subsilver2/template/overall_header.html перед добавить

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

<!-- PPK CD -->
<!-- IF S_COUNTDOWN_START -->
<script src="{ROOT_PATH}tracker/addons/js/jquery.countdown.js" type="text/javascript"></script>
<script type="text/javascript">
// <![CDATA[
	 jQuery(document).ready(
		function($)
		{
			var now = new Date();
			var endingSoon = new Date({S_COUNTDOWN_START});
			$("#ppkbb_countdown").countdown(endingSoon,
				{
					precision: '{S_COUNTDOWN_PRECISION}',
					prefix: '{S_COUNTDOWN_PREFIX}',
					suffix: '{S_COUNTDOWN_SUFFIX}',
					passed: '{S_COUNTDOWN_PASSED}'
				}
			);
		}
	);
// ]]>
</script>		
<!-- ENDIF -->
<!-- PPK CD -->
перед

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

	<br style="clear: both;" />

	<!-- INCLUDE breadcrumbs.html -->
добавить

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

<!-- PPK CD -->
<!-- IF S_COUNTDOWN_START -->
	<table class="tablebg" width="100%" cellspacing="1" cellpadding="0" style="margin-top: 5px;">
	<tr>
		<td class="row1">
			<div id="ppkbb_countdown" style="text-align:center;"></div>
		</td>
	</tr>
	</table>
<!-- ENDIF -->
<!-- PPK CD -->
Обновить переделанные стили, очистить кеш.

Адм. раздел - функции конферениции - Обратный отсчёт - настроить опции.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
vu
vulkan3
Благодарил (а): 45 раз
Поблагодарили: 36 раз
Сообщения: 1801
Зарегистрирован: 28 сен 2009, 03:36
Сообщение

BB3CountDown - добавление счётчика до какого-то события

25 дек 2011, 16:06

установил и форум перестал пахать , может для 44 версии исправить нужно ?
Pritoc.org Свободный торрент трекер
Аватара пользователя
PPK
Администратор
Благодарил (а): 82 раза
Поблагодарили: 1621 раз
Сообщения: 10284
Зарегистрирован: 21 мар 2009, 17:13
Сообщение

BB3CountDown - добавление счётчика до какого-то события

27 дек 2011, 22:29

нет, никак от версии не должен зависеть.
vu
vulkan3
Благодарил (а): 45 раз
Поблагодарили: 36 раз
Сообщения: 1801
Зарегистрирован: 28 сен 2009, 03:36
Сообщение

BB3CountDown - добавление счётчика до какого-то события

28 дек 2011, 00:02

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

includes/functions.php перед
после этого добавляю все в файл includes/functions.php сайт падает нотис вылезает и не загружается
Pritoc.org Свободный торрент трекер
Аватара пользователя
PPK
Администратор
Благодарил (а): 82 раза
Поблагодарили: 1621 раз
Сообщения: 10284
Зарегистрирован: 21 мар 2009, 17:13
Сообщение

BB3CountDown - добавление счётчика до какого-то события

28 дек 2011, 10:42

PPK писал(а):найти
PPK писал(а):если указанная строка не найдена, перед
вот эти части внимательно выполнены?
vu
vulkan3
Благодарил (а): 45 раз
Поблагодарили: 36 раз
Сообщения: 1801
Зарегистрирован: 28 сен 2009, 03:36
Сообщение

BB3CountDown - добавление счётчика до какого-то события

29 дек 2011, 10:06

все сделал все выводится но почему то не сохраняются даты в админке , меняю , захожу опять тоже самое , как сменить чтоб сохранилось, в базу запрос сделал но меняться дата не хочет

Добавлено спустя 7 часов 28 минут 38 секунд:
блин где копать не пойму , реально дата не хочет меняться

Добавлено спустя 23 минуты 13 секунд:
все сделал или не сделал но надо кешь постоянно очищать после смены даты !!! странно конечно но делаю и все меняется
Последний раз редактировалось vulkan3 29 дек 2011, 18:38, всего редактировалось 3 раза.
Pritoc.org Свободный торрент трекер
Аватара пользователя
PPK
Администратор
Благодарил (а): 82 раза
Поблагодарили: 1621 раз
Сообщения: 10284
Зарегистрирован: 21 мар 2009, 17:13
Сообщение

BB3CountDown - добавление счётчика до какого-то события

30 дек 2011, 10:31

/includes/acp/acp_board.php заменить

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

if(preg_match('/^ppkbb_/', $config_name))
на

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

if(preg_match('/^ppkbb_/', $config_name) && !preg_match('/^ppkbb_countdown/', $config_name))
vu
vulkan3
Благодарил (а): 45 раз
Поблагодарили: 36 раз
Сообщения: 1801
Зарегистрирован: 28 сен 2009, 03:36
Сообщение

BB3CountDown - добавление счётчика до какого-то события

12 янв 2012, 14:46

PPK писал(а):/includes/acp/acp_board.php заменить

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

if(preg_match('/^ppkbb_/', $config_name))
на

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

if(preg_match('/^ppkbb_/', $config_name) && !preg_match('/^ppkbb_countdown/', $config_name))
Заменил и при нажатии кнопки Отправить
не заменяется даже при очистке кеша
Pritoc.org Свободный торрент трекер
vu
vulkan3
Благодарил (а): 45 раз
Поблагодарили: 36 раз
Сообщения: 1801
Зарегистрирован: 28 сен 2009, 03:36
Сообщение

BB3CountDown - добавление счётчика до какого-то события

08 мар 2012, 20:22

странно у меня почему-то теперь не отображается ничего

Pritoc.org Свободный торрент трекер
Аватара пользователя
stepan83
Благодарил (а): 81 раз
Поблагодарили: 20 раз
Сообщения: 248
Зарегистрирован: 02 ноя 2011, 21:18
Сообщение

BB3CountDown - добавление счётчика до какого-то события

20 июн 2012, 16:55

vulkan3 писал(а):все сделал все выводится но почему то не сохраняются даты в админке , меняю , захожу опять тоже самое , как сменить чтоб сохранилось, в базу запрос сделал но меняться дата не хочет
тоже самое
PPK писал(а):/includes/acp/acp_board.php заменить
код заменил, требуемого результата нет

Вернуться в «Минимоды и хаки для phpBB3»