$code = $_POST["code"]; //код раздела
$cache = new CPHPCache();
$cache_time = 86400*7;
$cache_id = 'sectCache'.$code;
$cache_path = '/sectCache/'.$code;
if($cache->InitCache($cache_time, $cache_id, $cache_path)){
$vars[$code] = $cache->GetVars();
echo json_encode($vars[$code]);
} elseif(!is_array($vars[$code])){
$mass = array();
$arSelect = Array("ID", "NAME", "PROPERTY_YEAR", "PREVIEW_PICTURE", "PROPERTY_MODEL", "PROPERTY_WORKS", "PROPERTY_COST_WORK", "PROPERTY_COST_DETAILS", "PROPERTY_DISCOUNT_WORK", "PROPERTY_DISCOUNT_DETAILS");
if($code == "all-brands") {$arFilter = Array("IBLOCK_ID"=>1, "ACTIVE"=>"Y", "INCLUDE_SUBSECTIONS"=>"Y");} else {$arFilter = Array("IBLOCK_ID"=>1, "ACTIVE"=>"Y", "SECTION_CODE"=>$code);}
$res = CIBlockElement::GetList(array("ID"=>"DESC"), $arFilter, false, array(), $arSelect);
while($ob = $res->Fetch())
{
$ob["PREVIEW_PICTURE"] = CFile::GetPath($ob["PREVIEW_PICTURE"]);
array_push($mass, $ob);
}
echo json_encode($mass); // И возвращаем
$cache ->StartDataCache($cache_time, $cache_id, $cache_path);
$cache ->EndDataCache(array('sectCache'.$code => $mass));
}
use \Bitrix\Main\Loader;
// Это нужно где-нибудь складировать в init.php/других файлах, т.к. много где может понадобится
define('TARGET_IBLOCK_ID',1);
// Это то, что вернет скрипт
$arReturn = [
'result' => 'error',
'data' => 'Неправильный запрос',
];
$sCode = $_POST["code"];
if ( !empty($sCode) )
{
// Инициализируем php-кеширование (в хранилище кеша будет помещен json объект)
$cache = new CPHPCache();
// Устанавливаем время, на которое нужно кешировать
$cache_time = 86400*7;
// Уникальный ID
$cache_id = 'sectCache'.$code;
// Папка для хранения кеша
$cache_path = '/sectCache/'.$code;
// Проверяем существование кеша
if ( $cache->InitCache($cache_time, $cache_id, $cache_path) )
{
// Кеш есть, достаем данные
$arCacheData = $cache->GetVars();
// Достаем по ключу, с которым положили
$arReturn['data'] = $arCacheData['sectCache'.$sCode];
}
else
{
// Кеша нет, нужно получить данные
// Хороший тон - проверить, подключен ли модуль
if ( Loader::IncludeModule('iblock') )
{
$arSelect = [
"ID",
"NAME",
"PROPERTY_YEAR",
"PREVIEW_PICTURE",
"PROPERTY_MODEL",
"PROPERTY_WORKS",
"PROPERTY_COST_WORK",
"PROPERTY_COST_DETAILS",
"PROPERTY_DISCOUNT_WORK",
"PROPERTY_DISCOUNT_DETAILS"
];
/**
* Фильтр лучше использовать всегда, иначе
* при ошибке будет выбор всех элементов
*/
$arFilter = [
'IBLOCK_ID' => TARGET_IBLOCK_ID,
"ACTIVE" => "Y",
];
if ( $sCode == "all-brands" )
{
$arFilter['INCLUDE_SUBSECTIONS'] = 'Y';
}
else
{
$arFilter['SECTION_CODE'] = $sCode;
}
// Массив элементов
$arItems = [];
// Получаем данные
$res = \CIBlockElement::GetList(["ID"=>"DESC"], $arFilter, false, false, $arSelect);
while( $arElement = $res->Fetch() )
{
$arElement["PREVIEW_PICTURE"] = CFile::GetPath($arElement["PREVIEW_PICTURE"]);
$arItems[ $arElement['ID'] ] = $arElement;
}
// Сохраняем данные в кеше
$cache->StartDataCache($cache_time, $cache_id, $cache_path);
$cache->EndDataCache(['sectCache'.$sCode => $arItems]);
$arReturn['data'] = $arItems;
}
else
{
$arReturn['data'] = "Модуль инфоблоков не подключен";
}
}
}
echo json_encode($arReturn);
die();