SetTitle(""); $ajaxOn = false; } else {// если Ajax запрос require $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php'; } // Настройки $catalogIblockId = 1;// Ид инфоблока каталога // Указываем для каких разделов какой набор фильтров хотим, сначала ID раздела => массив названий свойств элементов $sectionsAndFilters = array( 2=>array( array("CODE"=>"MATERIAL","FILTERNAME"=>false), array("CODE"=>"RAZMER","FILTERNAME"=>false), array("CODE"=>"TEXTPROP","FILTERNAME"=>"ПростоТест") ) ); $sortSettings = array( array("TEXTNAME"=>"По новинкам","CODE"=>"newup","IBLOCKCODE"=>"ID","IBLOCKSORT"=>"DESC"), array("TEXTNAME"=>"По убыванию цены","CODE"=>"pricetodown","IBLOCKCODE"=>"CATALOG_PRICE_1","IBLOCKSORT"=>"DESC"), array("TEXTNAME"=>"По возрастанию цены","CODE"=>"pricetoup","IBLOCKCODE"=>"CATALOG_PRICE_1","IBLOCKSORT"=>"ASC") ); // Настройки закончились // Подключаем класс для работы с лайками require_once($_SERVER["DOCUMENT_ROOT"] . "/local/templates/main/phpscripts/mylikesclass.php"); $mylikesclass = new mylikesclass;//Создаём экземпляр объекта для работы с лайками // Вспопогательная функция - проверяет наличие элемента в списке function checkInFilter($name=false,$sectionsAndFilters=false) { if (($name !== false) and ($sectionsAndFilters !== false)) { foreach($sectionsAndFilters as $one) { if ($one["CODE"] == $name) { return true; } } } return false; } // Вспопогательная функция - возвращает информацию по фильтру function filterInfo($name=false,$sectionsAndFilters=false) { if (($name !== false) and ($sectionsAndFilters !== false)) { foreach($sectionsAndFilters as $one) { if ($one["CODE"] == $name) { return $one; } } } return false; } // Вспопогательная функция - определяет нужно ли сделать какой либо элемент фильтра активным function filterRequestCheck($name=false,$value=false) { if (($name !== false) and ($value !== false)) { if (isset($_REQUEST) and isset($_REQUEST["FILTER"]) and isset($_REQUEST["FILTER"][$name])) { foreach($_REQUEST["FILTER"][$name] as $one) { if ($one == $value) { return true; } } } } return false; } // Вспопогательная функция - проверяет есть ло хотя бы один чекнутый элемент в наборе function filterNameHaveChack($name=false,$array=false) { if (($name !== false) and ($array !== false)) { $ar = filterInfo($name,$array); foreach($ar["VALUES"] as $one) { if ($one["CHECK"] === true) { return true; } } } return false; } // Вспопогательная функция - возвращает массив активных значений фильтра function filterGetArrayChecked($name=false,$array=false) { if (($name !== false) and ($array !== false)) { $ar = filterInfo($name,$array); $ar2 = array(); foreach($ar["VALUES"] as $one) { if ($one["CHECK"] === true) { $ar2[] = $one["VALUE"]; } } return $ar2; } return false; } // Вспопогательная функция - используется для формирования URL в пагинации function paginationGetUrl($SECTION_ID=false,$PAGE=false) { $default_uri = ""; if ($SECTION_ID > 0) { $default_uri .= "?SECTION_ID=$SECTION_ID"; } if ($PAGE > 0) { if ($SECTION_ID > 0) { $default_uri .= "&"; } else { $default_uri .= "?"; } $default_uri .= "PAGE=$PAGE"; } return $default_uri; } // Работа с SECTION_ID (определяем передан ли, корректен ли, и формируем массив для разделов) $SECTION_ID = false; if (isset($_REQUEST["SECTION_ID"]) and ($_REQUEST["SECTION_ID"] != "")) { $SECTION_ID = $_REQUEST["SECTION_ID"]; } //Получаем список всех секций $aMenuLinksExt=$APPLICATION->IncludeComponent("bitrix:menu.sections", "", array( "IS_SEF" => "Y", "SEF_BASE_URL" => "", "SECTION_PAGE_URL" => "#SECTION_ID#", "DETAIL_PAGE_URL" => "#SECTION_ID#/#ELEMENT_ID#", "IBLOCK_TYPE" => "catalog", "IBLOCK_ID" => "1", "DEPTH_LEVEL" => "1", "CACHE_TYPE" => "A", "CACHE_TIME" => "36000000" ), false ); //var_dump($aMenuLinksExt); $sectionsMenu = array(); $SECTION_ID_check = false; foreach ($aMenuLinksExt as $one) { $sectionsMenu[] = array("name"=>$one[0],"id"=>$one[1]); if (($SECTION_ID !== false) and ($SECTION_ID == $one[1])) { $SECTION_ID_check = true; $APPLICATION->AddChainItem($one[0],("?SECTION_ID=".$one[1]));//Сразу же правим навигационную цепочку } } if (($SECTION_ID !== false) and ($SECTION_ID_check === false)) { $SECTION_ID = -1;// Если SECTION_ID передан но его не существует в списке Иб меню, значит SECTION_ID передан не по ссылке, является некорректным и ему присваивается -1. Если эе SECTION_ID не передавался он равен false } unset($SECTION_ID_check);// переменная больше не нужна // Работа с SECTION_ID здесь закончена // Выясняем нужна ли сортировка товаров $ibSortName = false; $ibSortType = false; if (isset($_REQUEST["sort"]) and $_REQUEST["sort"] != "") { foreach ($sortSettings as $key => $one) { if ($one["CODE"] == $_REQUEST["sort"]) { $ibSortName = $one["IBLOCKCODE"]; $ibSortType = $one["IBLOCKSORT"]; $sortSettings[$key]["CHECK"] = true; } else { $sortSettings[$key]["CHECK"] = false; } } } // Работа по выяснению необходимости сортировки закончена // Выбираем фильтры из раздела если он выбран if ($SECTION_ID > 0) { $sectionsAndFilters = $sectionsAndFilters[$SECTION_ID]; } else { $sectionsAndFilters = false; } //PROPERTY_TYPE S/L строка/список // Выполняем запрос на получение всех свойств Инфоблока и обновляем $sectionsAndFilters в зависимости от существования свойств $sectionsAndFilters2 = $sectionsAndFilters; $sectionsAndFilters = array(); $properties = CIBlockProperty::GetList(Array("sort"=>"asc", "name"=>"asc"), Array("ACTIVE"=>"Y", "IBLOCK_ID"=>$catalogIblockId)); $props = array(); while ($prop_fields = $properties->GetNext()) { $props[] = $prop_fields; } foreach ($sectionsAndFilters2 as $one) { if (checkInFilter($one["CODE"],$props)) { $info = filterInfo($one["CODE"],$props); $code = $one["CODE"]; $name = $one["FILTERNAME"]; if ($name === false) { $name = $info["NAME"]; } $sectionsAndFilters[] = array("CODE"=>$code,"FILTERNAME"=>$name,"TYPE"=>$info["PROPERTY_TYPE"],"VALUES"=>array()); } } unset($sectionsAndFilters2);unset($name);unset($code);unset($info);unset($one); // echo $prop_fields["ID"]." - ".$prop_fields["NAME"]." - ".$prop_fields["CODE"].""; // Подключаем модули use \Bitrix\Main; if(!CModule::IncludeModule("iblock") || !CModule::IncludeModule("sale") || !CModule::IncludeModule("catalog")){// Первый нужен для работы с инфоблоком второй для определения Id корзины. 3 нужен для получения информации о товаре echo "failure"; return; } $arSelect = Array("ID","NAME","PREVIEW_PICTURE","PREVIEW_TEXT","DETAIL_PICTURE","DETAIL_TEXT","CODE","DETAIL_PAGE_URL"); foreach($sectionsAndFilters as $one) { $arSelect[] = "PROPERTY_" . $one["CODE"];// Добавляем к arSelect список необходимых свойств } $arFilter = Array("IBLOCK_ID"=>1, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y"); if ($SECTION_ID > 0) { $arFilter["SECTION_ID"] = $SECTION_ID; } $arSort = array(); if (($ibSortName !== false) and ($ibSortType !== false)) { $arSort[$ibSortName]=$ibSortType; } $res = CIBlockElement::GetList($arSort, $arFilter, false, Array(), $arSelect); $resItems = array(); while ($ob = $res->GetNextElement()) { $arFields = $ob->GetFields(); foreach ($sectionsAndFilters as $key=>$one) { if (isset($arFields[("PROPERTY_" . $one["CODE"] . "_VALUE")]) and ($arFields[("PROPERTY_" . $one["CODE"] . "_VALUE")] !== NULL) and ($arFields[("PROPERTY_" . $one["CODE"] . "_VALUE")] !== "")) { if (!in_array($arFields[("PROPERTY_" . $one["CODE"] . "_VALUE")],$one["VALUES"])) { $sectionsAndFilters[$key]["VALUES"][] = array("VALUE"=>$arFields[("PROPERTY_" . $one["CODE"] . "_VALUE")],"CHECK"=>filterRequestCheck($one["CODE"],$arFields[("PROPERTY_" . $one["CODE"] . "_VALUE")])); } } } $resItems[] = $arFields; } // Применяем фильтры к списку товаров если нужно $resItems2 = $resItems; $resItems = array(); foreach ($resItems2 as $one) { $good = true; foreach ($sectionsAndFilters as $o) { if(filterNameHaveChack($o["CODE"],$sectionsAndFilters)) {// Если фильтр сейчас активен if (!in_array($one[("PROPERTY_" . $o["CODE"] . "_VALUE")],filterGetArrayChecked($o["CODE"],$sectionsAndFilters))) { $good = false; } } } if ($good) { $resItems[] = $one; } } if (!$ajaxOn) { ?> $APPLICATION->IncludeComponent("bitrix:breadcrumb", "navigation", Array( "COMPONENT_TEMPLATE" => ".default", "START_FROM" => "0", // Номер пункта, начиная с которого будет построена навигационная цепочка "PATH" => "", // Путь, для которого будет построена навигационная цепочка (по умолчанию, текущий путь) "SITE_ID" => "s1", // Cайт (устанавливается в случае многосайтовой версии, когда DOCUMENT_ROOT у сайтов разный) ), false ); ?> Каталог Фильтр 0) { ?> 1)) { ?> 0) { foreach ($sectionsAndFilters as $one) { $chackedFilter = filterNameHaveChack($one["CODE"],$sectionsAndFilters); ?> " readonly type="text" placeholder=""> "> " id="" name="FILTER[][]" value="" type="checkbox">"> >Очистить " readonly type="text" placeholder="Сортировка"> "> " name="sort" value="" type="radio">"> Применить Каталог " data-val="2"> Фильтр Материал 1 Материал 2 Материал 3 Размер 1 Размер 2 Размер 3 Изделие 1 Изделе 2 Изделие 3 Все По популярности По возрастанию цены По убыванию цены По убыванию цены По скидкам Применить Мы на Яндекс Маркет Акция Два комплекта белья по цене одного! Только до 28.12.2018 Закажи три комплекта и получи четвёртый в подарок! Только до 18.11.2018 Купите две простыни и мы подарим вам комплект наволочек! Только до 16.12.2018 check($one["ID"])) {// Если лайк на товаре установлен $LIKE_CLASS = " active";//Устанавливаем CSS класс активного лайка $LIKE_ACTION = "delete";//Устанавливаем Action нажатия по лайку в delete } ?> "> "> Комплект постельного белья от руб. NavPageCount; $nPageNom = $arResult["NAV_RESULT"]->NavPageNomer; $nCount = 10;// отладочная переменная количества страниц $nPageNom = 1;// отладочная переменная текущей страницы if (isset($_REQUEST["PAGE"])) { $nPageNom = $_REQUEST["PAGE"]; } $nStart = $nPageNom - 1; $nEnd = $nPageNom + $nLong;// Последняя цифра которая будет отображена в пагинации(может быть меньше чем количество страниц для размещения всех элементов) if ($nEnd > $nCount) {// Если последняя цифра в пагинации получилась больше чем количество страниц пагинации присваиваем ей значение количества страниц пагинации $nEnd = $nCount; } if ($nPageNom != 1) {// определяем нужна ли кнопка назад ?> назад =1) { if ($iii != $nPageNom) {//если кнопка не активна ?> вперёд html = $forJSONProducts; $JSONResults->pagination = $forJSONPagination; echo json_encode($JSONResults); } exit; $arSelect = Array("PROPERTY_MATERIAL","PROPERTY_TEXTPROP"); $arFilter = Array("IBLOCK_ID"=>1, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y"); $res = CIBlockElement::GetList(Array(), $arFilter, false, Array(), $arSelect); $results = array(); while ($ob = $res->GetNextElement()) { $arFields = $ob->GetFields(); $src = CFile::GetPath($arFields["PREVIEW_PICTURE"]); $name = $arFields["NAME"]; $checkProduct = true; $results[] = $arFields; var_dump($arFields); // $prop = $ob->GetProperties(); // var_dump($prop); echo "\n"; } echo 800; //var_dump($results);