Шаг 1:
dev.1c-bitrix.ru/api_help/main/reference/cphpcache...
Шаг 2:
dev.1c-bitrix.ru/learning/course/?COURSE_ID=43&LES...
Код ниже:
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();