Перейти к публикации

Изменение дня недели с которого будет начинаться месяц в календаре


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

Данный хак (модификация) позволяет добавить возможность изменения дня недели (воскресенье, понедельник), с которого будет начинаться месяц.

Вступление:

С выходом UTF версии движка DataLife Engine, DLE стал доступен практически для всего мира и на нем теперь можно создавать сайты на любых языках. Но дело в том, что в некоторых странах неделя начинается не с понедельника, а с воскресенья. Поэтому я и решил написать данный хак. Стоит заметить, что использовать эту возможность не обязательно на UTF версии движка, и не обязательно сайт должен быть рассчитан на зарубежную аудиторию. Если вы хотите, чтобы у вас на сайте месяц брал свое начало с воскресенья, то можете смело начинать установку.

Особенности:

- Возможность выбора отображения календаря через панель управления (в любое время функцию можно будет отключить).

- Простая установка (для особо ленивых в конце выложен упрощенный вариант установки)

- В случае включения опции красным днем будет считаться только воскресенье (суббота станет обычным днем).

Обычная установка (для особо ленивых, инструкция ниже):

1. Открыть файл engine/inc/options.php (добавляем опцию в панель управления -> Настройка системы)

Найти:

showRow( $lang['opt_sys_at'], $lang['opt_sys_atd']." ".date ( "d.m.Y, H:i", time () + ($config['date_adjust'] * 60) ), "<input class=\"edit bk\" type=text style=\"text-align: center;\"  name=\"save_con[date_adjust]\" value=\"{$config['date_adjust']}\" size=10>" );
Ниже добавить:
showRow( "Начать календарь с воскресенья", "Включение данной опции установит начало недели с воскресенья.", makeDropDown( array ("yes" => $lang['opt_sys_yes'], "no" => $lang['opt_sys_no'] ), "save_con[weekstart_sun]", "{$config['weekstart_sun']}" ) );
2. Открыть файл engine/modules/calendar.php (изменяем вид отображения календаря) Найти:
$first_of_month = mktime( 0, 0, 0, $cal_month, 7, $cal_year );
Заменить на:
	if( $config['weekstart_sun'] == "yes" ) $first_of_month = mktime( 0, 0, 0, $cal_month, 8, $cal_year );

	else $first_of_month = mktime( 0, 0, 0, $cal_month, 7, $cal_year );
Найти:
	# Дни недели: рабочая неделя

	for($it = 1; $it < 6; $it ++)

		$buffer .= '<th class="workday">' . $langdateshortweekdays[$it] . '</th>';


	# Дни недели: субботний и воскресный дни

	$buffer .= '<th class="weekday">' . $langdateshortweekdays[6] . '</th>';

	$buffer .= '<th class="weekday">' . $langdateshortweekdays[0] . '</th>';
Заменить на:
	# Если первый день недели воскресенье

	if( $config['weekstart_sun'] == "yes" ){

		# Дни недели: воскресный день

		$buffer .= '<th class="weekday">' . $langdateshortweekdays[0] . '</th>';


		# Дни недели: рабочая неделя

		for($it = 1; $it < 7; $it ++)

			$buffer .= '<th class="workday">' . $langdateshortweekdays[$it] . '</th>';

	} else {

		# Дни недели: рабочая неделя

		for($it = 1; $it < 6; $it ++)

			$buffer .= '<th class="workday">' . $langdateshortweekdays[$it] . '</th>';


		# Дни недели: субботний и воскресный дни

		$buffer .= '<th class="weekday">' . $langdateshortweekdays[6] . '</th>';

		$buffer .= '<th class="weekday">' . $langdateshortweekdays[0] . '</th>';

	}
Найти:
		if( $weekday == 7 ) {

			$buffer .= '</tr><tr>';

			$weekday = 0;

		}
Ниже добавить:
		if( $config['weekstart_sun'] == "yes" ) {

			# Если первый день недели воскресенье.

			if ( $weekday == "0" ) $weekends = true;

			else $weekends = false;

		} else {

			if ( $weekday == "5" or $weekday == "6" ) $weekends = true;

			else $weekends = false;

		}
Найти:
$weekday == '5' or $weekday == '6'
А также:
$weekday == "5" or $weekday == "6"
Оба варианта заменить на:
$weekends
3. Открыть файл engine/ajax/modules.php и проделать то же самое, что и во втором пункте (изменяем вид отображения календаря во время перелистывания с использованием технологии AJAX) Установка для особо ленивых: 1. Выполните первый пункт обычной установки. 2. Откройте файлы engine/modules/calendar.php и engine/ajax/calendar.php Замените всю функцию function cal на (данная функция полностью идентичная в обоих файлах):
	function cal($cal_month, $cal_year, $events) {

	global $f, $r, $year, $month, $config, $lang, $langdateshortweekdays, $PHP_SELF;


	$next = true;


	if( intval( $cal_year . $cal_month ) >= date( 'Ym' ) ) $next = false;


	$cur_date=date( 'Ymj' );

	$cal_date = $cal_year.$cal_month;


	$cal_month = intval( $cal_month );

	$cal_year = intval( $cal_year );


	if( $cal_month < 0 ) $cal_month = 1;

	if( $cal_year < 0 ) $cal_year = 2008;


	if( $config['weekstart_sun'] == "yes" ) $first_of_month = mktime( 0, 0, 0, $cal_month, 8, $cal_year );

	else $first_of_month = mktime( 0, 0, 0, $cal_month, 7, $cal_year );

	$maxdays = date( 't', $first_of_month ) + 1; // 28-31

	$prev_of_month = mktime( 0, 0, 0, ($cal_month - 1), 7, $cal_year );

	$next_of_month = mktime( 0, 0, 0, ($cal_month + 1), 7, $cal_year );

	$cal_day = 1;

	$weekday = date( 'w', $first_of_month ); // 0-6



	if( $config['allow_alt_url'] == "yes" ) {


		$date_link['prev'] = '<a class="monthlink" onclick="doCalendar(' . date( "'m','Y'", $prev_of_month ) . '); return false;" href="' . $config['http_home_url'] . date( 'Y/m/', $prev_of_month ) . '" title="' . $lang['prev_moth'] . '">&laquo;</a>&nbsp;&nbsp;&nbsp;&nbsp;';

		$date_link['next'] = '&nbsp;&nbsp;&nbsp;&nbsp;<a class="monthlink" onclick="doCalendar(' . date( "'m','Y'", $next_of_month ) . '); return false;" href="' . $config['http_home_url'] . date( 'Y/m/', $next_of_month ) . '" title="' . $lang['next_moth'] . '">&raquo;</a>';


	} else {


		$date_link['prev'] = '<a class="monthlink" onclick="doCalendar(' . date( "'m','Y'", $prev_of_month ) . '); return false;" href="' . $PHP_SELF . '?year=' . date( "Y", $prev_of_month ) . '&amp;month=' . date( "m", $prev_of_month ) . '" title="' . $lang['prev_moth'] . '">&laquo;</a>&nbsp;&nbsp;&nbsp;&nbsp;';

		$date_link['next'] = '&nbsp;&nbsp;&nbsp;&nbsp;<a class="monthlink" onclick="doCalendar(' . date( "'m','Y'", $next_of_month ) . '); return false;" href="' . $PHP_SELF . '?year=' . date( "Y", $next_of_month ) . '&amp;month=' . date( "m", $next_of_month ) . '" title="' . $lang['next_moth'] . '">&raquo;</a>';


	}


	if( ! $next ) $date_link['next'] = "&nbsp;&nbsp;&nbsp;&nbsp;&raquo;";


	$buffer = '<div id="calendar-layer"><table id="calendar" cellpadding="3" class="calendar"><tr><th colspan="7" class="monthselect"><center><b>' . $date_link['prev'] . langdate( 'F', $first_of_month ) . ' ' . $cal_year . $date_link['next'] . '</b></center></th></tr><tr>';


	$buffer = str_replace( $f, $r, $buffer );


	# Если первый день недели воскресенье

	if( $config['weekstart_sun'] == "yes" ){

		# Дни недели: воскресный день

		$buffer .= '<th class="weekday">' . $langdateshortweekdays[0] . '</th>';


		# Дни недели: рабочая неделя

		for($it = 1; $it < 7; $it ++)

			$buffer .= '<th class="workday">' . $langdateshortweekdays[$it] . '</th>';

	} else {

		# Дни недели: рабочая неделя

		for($it = 1; $it < 6; $it ++)

			$buffer .= '<th class="workday">' . $langdateshortweekdays[$it] . '</th>';


		# Дни недели: субботний и воскресный дни

		$buffer .= '<th class="weekday">' . $langdateshortweekdays[6] . '</th>';

		$buffer .= '<th class="weekday">' . $langdateshortweekdays[0] . '</th>';

	}


	$buffer .= '</tr><tr>';


	if( $weekday > 0 ) {

		$buffer .= '<td colspan="' . $weekday . '">&nbsp;</td>';

	}


	while ( $maxdays > $cal_day ) {


		$cal_pos = $cal_date.$cal_day;


		if( $weekday == 7 ) {

			$buffer .= '</tr><tr>';

			$weekday = 0;

		}


		if( $config['weekstart_sun'] == "yes" ) {

			# Если первый день недели воскресенье.

			if ( $weekday == "0" ) $weekends = true;

			else $weekends = false;

		} else {

			if ( $weekday == "5" or $weekday == "6" ) $weekends = true;

			else $weekends = false;

		}


		# В данный день есть новость

		if( isset( $events[$cal_day] ) ) {

			$date['title'] = langdate( 'd F Y', $events[$cal_day] );


			# Красный день календаря.

			if( $weekends ) {


				$go_page = ($config['ajax']) ? "onclick=\"DlePage('year=" . date( "Y", $events[$cal_day] ) . "&amp;month=" . date( "m", $events[$cal_day] ) . "&day=" . date( "d", $events[$cal_day] ) . "'); return false;\" " : "";


				if( $config['allow_alt_url'] == "yes" ) $buffer .= '<td '.(($cal_pos==$cur_date)?' class="day-active day-current" ':' class="day-active" ').'><center><a class="day-active" ' . $go_page . 'href="' . $config['http_home_url'] . '' . date( "Y/m/d", $events[$cal_day] ) . '/" title="' . $lang['cal_post'] . ' ' . $date['title'] . '">' . $cal_day . '</a></center></td>';

				else $buffer .= '<td '.(($cal_pos==$cur_date)?' class="day-active day-current" ':' class="day-active" ').'><center><a class="day-active" ' . $go_page . 'href="' . $PHP_SELF . '?year=' . date( "Y", $events[$cal_day] ) . '&amp;month=' . date( "m", $events[$cal_day] ) . '&day=' . date( "d", $events[$cal_day] ) . '" title="' . $lang['cal_post'] . ' ' . $date['title'] . '">' . $cal_day . '</a></center></td>';


			} 


			# Рабочии дни.

			else {


				$go_page = ($config['ajax']) ? "onclick=\"DlePage('year=" . date( "Y", $events[$cal_day] ) . "&amp;month=" . date( "m", $events[$cal_day] ) . "&day=" . date( "d", $events[$cal_day] ) . "'); return false;\" " : "";


				if( $config['allow_alt_url'] == "yes" ) $buffer .= '<td '.(($cal_pos==$cur_date)?' class="day-active-v day-current" ':' class="day-active-v" ').'><center><a class="day-active-v" ' . $go_page . 'href="' . $config['http_home_url'] . '' . date( "Y/m/d", $events[$cal_day] ) . '/" title="' . $lang['cal_post'] . ' ' . $date[title] . '">' . $cal_day . '</a></center></td>';

				else $buffer .= '<td '.(($cal_pos==$cur_date)?' class="day-active-v day-current" ':' class="day-active-v" ').'><center><a class="day-active-v" ' . $go_page . 'href="' . $PHP_SELF . '?year=' . date( "Y", $events[$cal_day] ) . '&amp;month=' . date( "m", $events[$cal_day] ) . '&day=' . date( "d", $events[$cal_day] ) . '" title="' . $lang['cal_post'] . ' ' . $date[title] . '">' . $cal_day . '</a></center></td>';


			}

		} 


		# В данный день новостей нет.

		else {


			# Если красный день календаря

			if( $weekends ) {

				$buffer .= '<td '.(($cal_pos==$cur_date)?' class="weekday day-current" ':' class="weekday" ').'><center>' . $cal_day . '</center></td>';

			} 


			# Дни, когда ничего нет

			else {

				$buffer .= '<td '.(($cal_pos==$cur_date)?' class="day day-current" ':' class="day" ').'><center>' . $cal_day . '</center></td>';

			}

		}


		$cal_day ++;

		$weekday ++;

	}


	if( $weekday != 7 ) {

		$buffer .= '<td colspan="' . (7 - $weekday) . '">&nbsp;</td>';

	}


	return $buffer . '</tr></table></div>';

}

Ссылка на сообщение
Поделиться на других сайтах

Небольшое дополнение:

Рас уж мы решили изменять календарь, то, думаю, будет разумно сделать еще одно небольшое изменение.

В файлах engine/modules/calendar.php и engine/ajax/calendar.php

Найти:

$buffer = '<div id="calendar-layer"><table id="calendar" cellpadding="3" class="calendar"><tr><th colspan="7" class="monthselect"><center><b>' . $date_link['prev'] . langdate( 'F', $first_of_month ) . ' ' . $cal_year . $date_link['next'] . '</b></center></th></tr><tr>';
Заменить на:
$buffer = '<div id="calendar-layer"><table id="calendar" cellpadding="3" class="calendar"><tr><th>' . $date_link['prev'] . '</th><th colspan="5" class="monthselect"><center><b>'. langdate( 'F', $first_of_month ) . ' ' . $cal_year . '</b></center></th><th>' . $date_link['next'] . '</th></tr><tr>';

Данные действия позволят зафиксировать стрелочки перелистывания месяцев. Не очень удобно листать, когда стрелочки меняют свое расположение в зависимости от длины месяца.

Изменено пользователем kangalexey
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...