kang 42 Опубликовано: 24 апреля 2010 Рассказать Опубликовано: 24 апреля 2010 Данный хак (модификация) позволяет добавить возможность изменения дня недели (воскресенье, понедельник), с которого будет начинаться месяц. Вступление: С выходом 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'] . '">«</a> '; $date_link['next'] = ' <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'] . '">»</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 ) . '&month=' . date( "m", $prev_of_month ) . '" title="' . $lang['prev_moth'] . '">«</a> '; $date_link['next'] = ' <a class="monthlink" onclick="doCalendar(' . date( "'m','Y'", $next_of_month ) . '); return false;" href="' . $PHP_SELF . '?year=' . date( "Y", $next_of_month ) . '&month=' . date( "m", $next_of_month ) . '" title="' . $lang['next_moth'] . '">»</a>'; } if( ! $next ) $date_link['next'] = " »"; $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 . '"> </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] ) . "&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] ) . '&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] ) . "&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] ) . '&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) . '"> </td>'; } return $buffer . '</tr></table></div>'; } 1 Цитата Ссылка на сообщение Поделиться на других сайтах
kang 42 Опубликовано: 24 апреля 2010 Рассказать Опубликовано: 24 апреля 2010 (изменено) Автор Небольшое дополнение: Рас уж мы решили изменять календарь, то, думаю, будет разумно сделать еще одно небольшое изменение. В файлах 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>'; Данные действия позволят зафиксировать стрелочки перелистывания месяцев. Не очень удобно листать, когда стрелочки меняют свое расположение в зависимости от длины месяца. Изменено 24 апреля 2010 пользователем kangalexey Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.