В.3. Компонент games.filter Файл component.php
//компонент
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
try
{
//обрабатываем массив $arParams
prepare_params($arParams);
//проверяем параметры
if(strlen($arParams["IBLOCK_TYPE"]) <= 0){
$arParams["IBLOCK_TYPE"] = IB_TYPE_GAMES;
}
if(empty($arParams["IBLOCK_ID"])){
$arParams["IBLOCK_ID"] = IB_GAMES_PC;
}
$arParams["COUNT"] = intval($arParams["COUNT"]);
if($arParams["COUNT"] <= 0){
$arParams["COUNT"] = 10;
}
if(strlen($arParams["SORT_BY1"]) <= 0){
$arParams["SORT_BY1"] = "ID";
}
if($arParams["SORT_ORDER1"] != "DESC"){
$arParams["SORT_ORDER1"] = "ASC";
}
if(strlen($arParams["SORT_BY2"]) <= 0){
$arParams["SORT_BY2"] = "NAME";
}
if($arParams["SORT_ORDER2"] != "DESC"){
$arParams["SORT_ORDER2"] = "ASC";
}
if(empty($arParams["DATE_REL_RUS_PROPERTY_CODE"])){
$arParams["DATE_REL_RUS_PROPERTY_CODE"] = "DATES_DATE_REL_RUS";
}
if(empty($arParams["MAIN_METAMARK_PROPERTY_CODE"])){
$arParams["MAIN_METAMARK_PROPERTY_CODE"] = "MAIN_METAMARK";
}
if(empty($arParams["FILTER_VARIABLE_NAME"])){
$arParams["FILTER_VARIABLE_NAME"] = "arrFilter";
}
$arParams["DETAIL_DATE_MIN"] = intval($arParams["DETAIL_DATE_MIN"]);
if($arParams["DETAIL_DATE_MIN"] <= 0){
$arParams["DETAIL_DATE_MIN"] = 1997;
}
$arParams["DETAIL_DATE_MAX"] = intval($arParams["DETAIL_DATE_MAX"]);
if($arParams["DETAIL_DATE_MAX"] <= 0){
$arParams["DETAIL_DATE_MAX"] = date("Y");
}
$period_list = $arParams["PERIOD_LIST"];
$arParams["PERIOD_LIST"] = array();
//проверка вариантов интервалов времени
$j = 1;
foreach($period_list as $key => $value){
if(!$matches = get_parts_reg($value, "/\[(\-|\+*)(\d+)(.)\]/i")){
continue;
}
$text = $matches["text"];
$matches = $matches["matches"];
//print_r($matches);
$matches[3] = mb_strtolower($matches[3], LANG_CHARSET);
if($matches[3] != "m" && $matches[3] != "d" && $matches[3] != "y"){
continue;
}
$arParams["PERIOD_LIST"][$j] = array(
"TITLE" => $text,
"TYPE" => $matches[3],
"VALUE" => ($matches[1] == "-" ? (-1)*intval($matches[2]) : intval($matches[2]))
);
$j++;
}
//проверка метаоценок
$mark_list = $arParams["MARKS_LIST"];
$arParams["MARKS_LIST"] = array();
$j = 1;
foreach($mark_list as $key => $value){
if(!$matches = get_parts_reg($value, "/\[\b(\d+)\]\[(.+)\]/i")){
continue;
}
$text = $matches["text"];
$matches = $matches["matches"];
$arParams["MARKS_LIST"][$j] = array(
"TITLE" => $text,
"VALUE" => intval($matches[1]),
"COLOR" => $matches[2]
);
$j++;
}
$arResult = array(
"GENRES" => array(),
"PLATFORMS" => array(),
"POST_VARIABLES" => array()
);
/******
Обработка отправленной формы фильтра и формирование выходного массива с параметрами фильтрации
******/
if(isset($_REQUEST["filter"]) || isset($_REQUEST["with_no_script"])){
//временный массив для фильтра
$filter_var = array();
//предварительная обработка данных пришедшего запроса
$_REQUEST["marki"] = intval($_REQUEST["marki"]);
$_REQUEST["datei"] = intval($_REQUEST["datei"]);
$_REQUEST["platform"] = trim($_REQUEST["platform"]);
$_REQUEST["genre"] = trim(htmlspecialchars(urldecode($_REQUEST["genre"])));
$_REQUEST["markv"] = floatval($_REQUEST["markv"]);
$_REQUEST["daterange"] = intval($_REQUEST["daterange"]);
$_REQUEST["dfrom"] = trim($_REQUEST["dfrom"]);
$_REQUEST["dto"] = trim($_REQUEST["dto"]);
$_REQUEST["alpha"] = mb_substr(trim(urldecode($_REQUEST["alpha"])), 0, 1, LANG_CHARSET);
if(!empty($_REQUEST["platform"])){
$filter_var["SECTION_CODE"] = $_REQUEST["platform"];
}
if(strlen($_REQUEST["alpha"]) > 0){
if($_REQUEST["alpha"] == "1"){
$numbs = array();
for($i=0; $i <= 9; $i++){
$numbs[] = $i."%";
}
//$filter_var["NAME"] = implode("|", $numbs);
$filter_var[">NAME"] = "-1%";
$filter_var["<=NAME"] = "9%";
}
else{
$filter_var["NAME"] = $_REQUEST["alpha"]."%";
}
//echo $filter_var["NAME"];
}
if(eregi("^[0-9]{4}$", $_REQUEST["dfrom"])){
$f_date_from = "year";
$_REQUEST["dfrom"] = intval($_REQUEST["dfrom"]);
if($_REQUEST["dfrom"] <= 0){
$_REQUEST["dfrom"] = $arParams["DETAIL_DATE_MIN"];
}
}
else{
if(strtotime($_REQUEST["dfrom"]) <= 0){
$_REQUEST["daterange"] = 0;
}
}
if(eregi("^[0-9]{4}$", $_REQUEST["dto"])){
$f_date_to = "year";
if($_REQUEST["dto"] <= 0){
$_REQUEST["dto"] = $arParams["DETAIL_DATE_MAX"];
}
}
else{
if(strtotime($_REQUEST["dto"]) <= 0){
$_REQUEST["daterange"] = 0;
}
}
//выьранный в списке временной интервал
$datei_key = $_REQUEST["datei"];
if($_REQUEST["daterange"] == 1){
$datei_key = 0;
$date_from = $_REQUEST["dfrom"];
$date_to = $_REQUEST["dto"];
if($f_date_from == "year" && $f_date_to == "year" && $date_to < $date_from){
$date_to = $date_from;
}
if($f_date_from == "year"){
$filter_var[">=PROPERTY_".$arParams["DATE_REL_RUS_PROPERTY_CODE"]] = date("Y-m-d", strtotime("01.01.".$date_from));
}
else{
$filter_var[">=PROPERTY_".$arParams["DATE_REL_RUS_PROPERTY_CODE"]] = date("Y-m-d", strtotime($date_from));
}
if($f_date_to == "year"){
$filter_var["<=PROPERTY_".$arParams["DATE_REL_RUS_PROPERTY_CODE"]] = date("Y-m-d", strtotime("31.12.".$date_to));
}
else{
$filter_var["<=PROPERTY_".$arParams["DATE_REL_RUS_PROPERTY_CODE"]] = date("Y-m-d", strtotime($date_to));
}
$arResult["POST_VARIABLES"]["datei"] = $date_from." - ".$date_to;
}
if($datei_key > 0){
//обрабатываем пришедший интервал, в зависимости от типа задавая параметры фильтру
$filter_var["<=PROPERTY_".$arParams["DATE_REL_RUS_PROPERTY_CODE"]] = date("Y-m-d");
$datei_type = $arParams["PERIOD_LIST"][$datei_key]["TYPE"];
$datei_value = intval($arParams["PERIOD_LIST"][$datei_key]["VALUE"]);
switch($datei_type)
{
//обрабатываем день
case "d":
//добавляем к текущей дате наше число со знаком минус
$interval_from = AddToTimestamp(array("DD" => -$datei_value));
break;
//месяц
case "m":
$interval_from = AddToTimestamp(array("MM" => -$datei_value));
break;
//год
case "y":
$interval_from = AddToTimestamp(array("YYYY" => -$datei_value));
break;
default:
break;
}
if($datei_value > 0){
$filter_var[">=PROPERTY_".$arParams["DATE_REL_RUS_PROPERTY_CODE"]] = date("Y-m-d", $interval_from);
}
else{
$filter_var["<=PROPERTY_".$arParams["DATE_REL_RUS_PROPERTY_CODE"]] = date("Y-m-d", $interval_from);
}
$arResult["POST_VARIABLES"]["datei"] = $arParams["PERIOD_LIST"][$datei_key]["TITLE"];
}
//формируем в отдельном блоке фильтр по месяцам, если запрос пришел оттуда
$_REQUEST["month"] = intval($_REQUEST["month"]);
$_REQUEST["year"] = intval($_REQUEST["year"]);
if($_REQUEST["month"] > 0 && $_REQUEST["year"] > 0){
$top_day = get_max_day($_REQUEST["month"], $_REQUEST["year"]);
// echo $top_day;
$filter_var[">=PROPERTY_".$arParams["DATE_REL_RUS_PROPERTY_CODE"]] = date("Y-m-d", strtotime("01.".$_REQUEST["month"].".".$_REQUEST["year"]));
$filter_var["<=PROPERTY_".$arParams["DATE_REL_RUS_PROPERTY_CODE"]] = date("Y-m-d", strtotime($top_day.".".$_REQUEST["month"].".".$_REQUEST["year"]));
}
//выбранный интервал метаоценок
$marki_key = $_REQUEST["marki"];
$markv = $_REQUEST["markv"];
//обрабатываем пришедшую величину для метаоценки
//если указана точная метаоценка, формируем фильтр для нее
if($markv > 0){
$marki_key = -1;
$filter_var["PROPERTY_".$arParams["MAIN_METAMARK_PROPERTY_CODE"]] = $markv;
$arResult["POST_VARIABLES"]["marki"] = $markv;
}
//иначе если выбрано значение из списка интервалов, формируем фильтр по нему
if($marki_key > 0){
$filter_var[">=PROPERTY_".$arParams["MAIN_METAMARK_PROPERTY_CODE"]] = $arParams["MARKS_LIST"][$marki_key]["VALUE"];
$arResult["POST_VARIABLES"]["marki"] = $arParams["MARKS_LIST"][$marki_key]["TITLE"];
}
//формируем фильтр для жанра
$genre = $_REQUEST["genre"];
if(!empty($genre)){
$p_enum = CIBlockProperty::GetPropertyEnum($arParams["GENRE_PROPERTY_CODE"], array(), array("XML_ID" => $genre));
$ar_enum = $p_enum->GetNext();
$filter_var["PROPERTY_".$arParams["GENRE_PROPERTY_CODE"]."_VALUE"] = $ar_enum["VALUE"];
$arResult["POST_VARIABLES"]["GENRE"] = $ar_enum["VALUE"];
}
}
else{
//если мы на главной странице, то задаем опережающие значения фильра
if($arParams["MAIN_PAGE"] == "Y"){
$value_period_finded = false;
foreach($arParams["PERIOD_LIST"] as $key => $per){
if($per["TYPE"] == "m" && $per["VALUE"] == 6){
$value_period_finded = true;
break;
}
}
if($value_period_finded){
$_REQUEST["datei"] = $key;
$interval_from = AddToTimestamp(array("MM" => -6));
$filter_var[">=PROPERTY_".$arParams["DATE_REL_RUS_PROPERTY_CODE"]] = date("Y-m-d", $interval_from);
$arResult["POST_VARIABLES"]["datei"] = $arParams["PERIOD_LIST"][$key]["TITLE"];
}
}
}
$GLOBALS[$arParams["FILTER_VARIABLE_NAME"]] = $filter_var;
//проводим запрос к списку информационных блоков (смысл - список платформ)
$arIblockOrder = array(
$arParams["SORT_BY1"] => $arParams["SORT_ORDER1"],
$arParams["SORT_BY2"] => $arParams["SORT_ORDER2"],
"ID" => "DESC"
);
$arIblockFilter = array(
"IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"ACTIVE" => "Y"
);
$db_iblock = CIBlockSection::GetList($arIblockOrder, $arIblockFilter);
if(!$db_iblock){
throw new Exception(DB_ERROR_TEXT);
}
//если платформ не найдено, нет смысла фильтровать, выходим
if($db_iblock->SelectedRowsCount() <= 0){
$this->IncludeComponentTemplate();
return;
}
while($fetch = $db_iblock->GetNext()){
$arResult["PLATFORMS"][$fetch["CODE"]] = array(
"NAME" => $fetch["NAME"],
"ID" => $fetch["ID"],
);
}
//запрос к списку жанров
$arEnumOrder = array(
"SORT" => "ASC",
"ID" => "ASC"
);
$arEnumFilter = array(
"CODE" => $arParams["GENRE_PROPERTY_CODE"],
"IBLOCK_ID" => $arParams["IBLOCK_ID"]
);
$db_enum = CIBlockPropertyEnum::GetList($arEnumOrder, $arEnumFilter);
while($fetch = $db_enum->GetNext()){
$genre_list[$fetch["XML_ID"]] = $fetch["VALUE"];
}
$arResult["ALL_GENRE"] = $genre_list;
//основные жанры
foreach($arParams["MAIN_GENRE"] as $val){
$arResult["MAIN_GENRE"][$val] = $genre_list[$val];
}
//подключаем шаблон
$this->IncludeComponentTemplate();
}
catch(Exception $ex)
{
$arResult["ERROR"] = $ex->getMessage();
}
?> Файл script.js /*скрипт*/
//устанавливает платформу в специальное поле типа input для последующего запроса к серверу и выполняет запрос с помощью функции check_form_submit
function set_platform(path, form, iblock_id, result_block)
{
$("#iblock_id").val(iblock_id);
return check_form_submit(path, form, result_block);
}
function set_alpha(path, form, alpha, result_block)
{
$("#alpha").val(alpha);
return check_form_submit(path, form, result_block);
}
//собирает все инпуты и селекты из формы с id = ob и отправляет запрос на сервер
function check_form_submit(path, ob, result_block, additional_pars)
{
if($("#detail_date_enabled").val() == "0" || $("#detail_date_enabled").val() == ""){
$("#detail-date-from-catcher").val("");
$("#detail-date-to-catcher").val("");
}
if($("#mark_value").val() > 0){
document.getElementById("mark_interval").selectedIndex = 0;
}
//собираем все инпуты и селекты из фильтра
var query_string_arr = new Array("ajax_request_mode=Y");
var state_string_arr = new Array();
var query_string = "";
var state_string;
var query_string_ajax;
$("#"+ob.id+" input, #"+ob.id+" select").each(function(){
var name = $(this).attr("name");
var value = $(this).val();
if(name.length > 0 && value.length > 0 && name != "with_no_script"){
var val = parseInt(value);
if(!isNaN(val) && name != "dfrom" && name != "dto"){
if(val > 0 || name == "alpha"){
query_string_arr.push(name+"="+value);
state_string_arr.push(name+":"+value);
}
}
else{
query_string_arr.push(name+"="+value);
state_string_arr.push(name+":"+value);
}
}
});
query_string_arr.push(additional_pars);
query_string_ajax = query_string_arr.join("&");
query_string_arr.push("ajax_request_mode=Y");
query_string = query_string_arr.join("&");
state_string = state_string_arr.join("&");
set_server_request(path, query_string, "ajax-status", result_block, state_string);
return false;
} $(function(){
//определяем набор ID элементов, задействованых в процессе имитации работы select'ов
var select_list_ids = new Array();
select_list_ids[0] = new Array("date_interval", "date-select-box", "date-select-catcher", "date-select-opener", "detail_date_enabled");
select_list_ids[1] = new Array("mark_interval", "mark-select-box", "mark-select-catcher", "mark-select-opener", "mark_value");
//проходим по этому списку, для каждого набора проделывая нужные действия
for(var j in select_list_ids)
{
var select_id = "#"+select_list_ids[j][0];
var select_id_v = select_list_ids[j][0];
var box_id = "#"+select_list_ids[j][1];
var catcher_id = "#"+select_list_ids[j][2];
var opener_id = "#"+select_list_ids[j][3];
var additional_id = "#" + select_list_ids[j][4];
//получаем из select записи
if(!document.getElementById(select_id_v)){
continue;
}
var list = document.getElementById(select_id_v).options;
for(var i=list.length - 1; i >=0; i--){
if($(list[i]).val().length <= 0){
continue;
}
//создаем последовательно объекты
var a = document.createElement("a");
//проверяем есть ли в названии слева код цвета текста
var html = list[i].text;
if(html.length <= 0){
continue;
}
if(html.indexOf("[") != -1 && html.indexOf("]") != -1){
from_index = html.indexOf("[");
to_index = html.indexOf("]");
var color = html.substring(from_index + 1, to_index);
if(color.length > 0){
var span = document.createElement("span");
$(span).css("color", color);
$(a).append(span);
}
html = html.substring(0, from_index);
list[i].text = list[i].text.substring(0, from_index);
$(span).html(html);
}
else{
$(a).html(html);
}
//тэгу a добавляем реакцию на событие - клик
$(a).hover(
function(e)
{
$(this).addClass("next_hover");
},
function(e)
{
$(this).removeClass("next_hover");
}
);
$(a).bind(
"click",
{list_option: list[i], b_id: box_id, add_id: additional_id, catcher: catcher_id},
function(event){
$(event.data.add_id).val("");
var html = $(this).html();
$(event.data.catcher).attr("title", event.data.list_option.text);
$(event.data.catcher).val(event.data.list_option.text);
//выделяем нужный нам option
$(event.data.list_option).attr("selected", "selected");
//отправляем форму
document.getElementById("filter-box-form-sended").click();
$(event.data.b_id).hide();
});
$(a).addClass("next");
$(a).prependTo(box_id);
}
//связка по клику с кнопкой выбора
$(opener_id).bind(
"click",
{b_id : box_id, select_list_ids: select_list_ids},
function(event){
if($(event.data.b_id).css("display") == "none"){
$(event.data.b_id).show();
}
else{
$(event.data.b_id).hide();
}
for(var i in event.data.select_list_ids){
if(event.data.b_id != "#"+event.data.select_list_ids[i][1]){
$("#"+event.data.select_list_ids[i][1]).hide();
}
}
$("#genre-select-box").hide();
$("#detail-date-from-select-box").hide();
$("#detail-date-to-select-box").hide();
return false;
}
);
}
$("#detail-date-from-opener").bind(
"click",
function(event){
if($("#detail-date-from-select-box").css("display") == "none"){
$("#detail-date-from-select-box").show();
}
else{
$("#detail-date-from-select-box").hide();
}
$("#detail-date-to-select-box").hide();
return false;
}
);
$("#detail-date-to-opener").bind(
"click",
function(event){
if($("#detail-date-to-select-box").css("display") == "none"){
$("#detail-date-to-select-box").show();
}
else{
$("#detail-date-to-select-box").hide();
}
$("#detail-date-from-select-box").hide();
return false;
}
);
$("#detail-date-from-select-box a.next").bind("click", {list_option: false, b_id: "#detail-date-from-select-box", catcher: "#detail-date-from-catcher"}, function(event){
$(event.data.catcher).attr("title", $(this).html());
$(event.data.catcher).datepicker('option',"defaultDate", "01.01."+$(this).html());
$(event.data.catcher).val($(this).html());
$(event.data.b_id).hide();
return false;
});
$("#detail-date-to-select-box a.next").bind("click", {list_option: false, b_id: "#detail-date-to-select-box", catcher: "#detail-date-to-catcher"}, function(event){
$(event.data.catcher).attr("title", $(this).html());
$(event.data.catcher).datepicker('option', "defaultDate", "31.12."+$(this).html());
$(event.data.catcher).val($(this).html());
$(event.data.b_id).hide();
return false;
});
//отдельная связка по клику для #genre-select-box
$("#genre-select-opener").bind(
"click",
{b_id : "#genre-select-box"},
function(event){
if($(event.data.b_id).css("display") == "none"){
$(event.data.b_id).show();
}
else{
$(event.data.b_id).hide();
}
$("#date-select-box").hide();
$("#mark-select-box").hide();
//$("#")
return false;
}
);
$("#genre-select-box a.next").bind("click", {list_option: false, b_id: "#genre-select-box", catcher: "#genre-select-catcher"}, function(event){
$(event.data.catcher).attr("title", $(this).html());
$(event.data.catcher).val($(this).html());
var genre_list = document.getElementById("genre").options;
var check_flag = false;
for(var i = 0; i < genre_list.length; i++){
if(genre_list[i].text == $(this).html()){
$(genre_list[i]).attr("selected", "selected");
check_flag = true;
break;
}
}
if(!check_flag){
$(genre_list[0]).attr("selected", "selected");
}
//отправляем форму
document.getElementById("filter-box-form-sended").click();
$(event.data.b_id).hide();
return false;
});
$("#genre-select-box p.more a").bind("click", function(event){
if($("#genre-select-box .col").css("display") != "none"){
$("#genre-select-box .col").hide();
$("#genre-select-box .main").show();
$("#genre-select-box").addClass("genre_small");
$("#genre-select-box").removeClass("genre_wide");
$(this).html("Все жанры");
}
else{
$("#genre-select-box .col").show();
$("#genre-select-box .main").hide();
$("#genre-select-box").addClass("genre_wide");
$("#genre-select-box").removeClass("genre_small");
$(this).html("Основные");
}
return false;
});
$("div.filter-box .select-box .js-included").show();
$("div.filter-box .select-box .js-not-included").hide();
var def_date_from = $("#detail-date-from-catcher").val();
if(def_date_from && def_date_from.length > 0 && def_date_from.length <= 4){
def_date_from = "01.01."+def_date_from;
}
var def_date_to = $("#detail-date-to-catcher").val();
if(def_date_to && def_date_to.length > 0 && def_date_to.length <= 4){
def_date_to = "31.12."+def_date_to;
}
$("#detail_date_sender").bind("click", function(){
$("#detail_date_enabled").val("1");
});
$.datepicker.setDefaults(
$.extend($.datepicker.regional["ru"])
);
if(def_date_from && def_date_to){
$("#detail-date-from-catcher").datepicker({
dateFormat:"dd.mm.yy",
defaultDate: def_date_from
});
$("#detail-date-to-catcher").datepicker({
dateFormat:"dd.mm.yy",
defaultDate: def_date_to
});
}
$("#date_from_calendar").bind("click", function(){
$("#detail-date-from-catcher").datepicker("show");
return false;
});
$("#date_to_calendar").bind("click", function(){
$("#detail-date-to-catcher").datepicker("show");
return false;
});
$(".ui-datepicker").bind("click", function(event){
$("#date-select-box").show();
event.stopPropagation();
});
}); Файл result_modifier.php шаблона month_switcher
/*модификатор результата*/
global $arMonthNames;
//общее количество выводимых месяцев
if($arParams["DISPLAY_MONTHS_COUNT"] <= 0){
$arParams["DISPLAY_MONTHS_COUNT"] = 3;
}
//ограничение сверху или снизу
if(strlen($arParams["BORDER"]) <= 0){
$arParams["BORDER"] = "bottom";
}
//ограничения по годам для верха и для низа
$arParams["MIN_YEAR"] = intval($arParams["MIN_YEAR"]);
$arParams["MAX_YEAR"] = intval($arParams["MAX_YEAR"]);
if($arParams["MIN_YEAR"] <= 0){
$arParams["MIN_YEAR"] = 1990;
}
if($arParams["MAX_YEAR"] <= 0){
$arParams["MAX_YEAR"] = 2013;
}
$b_redirect = false;
$_REQUEST["month"] = intval($_REQUEST["month"]);
$_REQUEST["year"] = intval($_REQUEST["year"]);
if($_REQUEST["month"] > 12){
$_REQUEST["month"] = 12;
$b_redirect = true;
}
if($_REQUEST["month"] > 0 && $_REQUEST["year"] > 0 && !isset($_REQUEST["filter"])){
$b_redirect = true;
}
//если месяц задан в адресной строке, в качестве текущего используем его
if($_REQUEST["month"] > 0){
$current_month = $_REQUEST["month"];
}
else{
$current_month = intval(date("m"));
} ////аналогично для года
if($_REQUEST["year"] > 0){
$current_year = $_REQUEST["year"];
}
else{
$current_year = intval(date("Y"));
}
/*определяем середину интервала в зависимости от количества месяцев*/
if($arParams["DISPLAY_MONTHS_COUNT"] % 2 == 0){
$center = floor($arParams["DISPLAY_MONTHS_COUNT"] / 2);
}
else{
$center = ceil($arParams["DISPLAY_MONTHS_COUNT"] / 2);
}
//флаг того, что мы находимся в данный момент на текущей дате
$current_date_flag = false;
if($current_year == intval(date("Y")) && $current_month == intval(date("m"))){
$current_flag = true;
}
if($current_year < $arParams["MIN_YEAR"]){
$current_year = $arParams["MIN_YEAR"];
$current_month = 1;
$b_redirect = true;
}
$bottom_move_flag = false;
if($arParams["BORDER"] == "bottom" && ($current_year < intval(date("Y")) || ($current_month < intval(date("m")) && $current_year <= intval(date("Y"))))){
$current_year = intval(date("Y"));
$current_month = intval(date("m"));
$b_redirect = true;
$bottom_move_flag = true;
}
if($current_year == $arParams["MIN_YEAR"] && $current_month == 1){
$bottom_move_flag = true;
}
$top_move_flag = false;
if($current_year > $arParams["MAX_YEAR"]){
$current_year = $arParams["MAX_YEAR"];
$current_month = 12;
$b_redirect = true;
$top_move_flag = true;
}
if($current_year == $arParams["MAX_YEAR"] && $current_month == 12){
$top_move_flag = true;
}
if($arParams["BORDER"] == "top" && ($current_year > intval(date("Y")) || ($current_month > intval(date("m")) && $current_year >= intval(date("Y"))))){
$current_year = intval(date("Y"));
$current_month = intval(date("m"));
$b_redirect = true;
$top_move_flag = true;
}
$k = 1;
//массив с набором предыдущих месяцев
$arResult["PREV_MONTHS"] = array();
$prev_year = $current_year;
$prev_month = $current_month;
if(!$bottom_move_flag && ($arParams["BORDER"] != "bottom" || !$current_flag)){
while($k < $center){
if($prev_month - 1 <= 0){
$prev_year -= 1;
$prev_month = 12;
}
else{
$prev_month = $prev_month - 1;
}
$arResult["PREV_MONTHS"][] = array(
"month" => $prev_month,
"month_name" => $arMonthNames[$prev_month]["month"],
"month_year" => $prev_year,
);
$k++;
}
}
if($b_redirect){
LocalRedirect($APPLICATION->GetCurPageParam("filter=up&month=".$current_month."&year=".$current_year, array("filter", "month", "year")));
exit(1);
}
$arResult["CURRENT_MONTH"] = $current_month;
$arResult["CURRENT_MONTH_NAME"] = $arMonthNames[$current_month]["month"];
$arResult["CURRENT_YEAR"] = $current_year; $k = $center + 1;
$arResult["NEXT_MONTHS"] = array();
$next_month = $current_month;
$next_year = $current_year;
if(!$top_move_flag && ($arParams["BORDER"] != "top" || !$current_flag)){
while($k <= $arParams["DISPLAY_MONTHS_COUNT"]){
if($next_month + 1 > 12){
$next_year += 1;
$next_month = 1;
}
else{
$next_month = $next_month + 1;
}
$arResult["NEXT_MONTHS"][] = array(
"month" => $next_month,
"month_name" => $arMonthNames[$next_month]["month"],
"month_year" => $next_year,
);
$k++;
}
}
$arResult["PREV_MONTHS"] = array_reverse($arResult["PREV_MONTHS"]);
?>
|