Установить через composer(или скачать), подключить в php_interface/init.php
composer require izica/bitrix-iblock-query-builder
- Получение информации о навигации
- Получение разделов и элементов инфоблоков
- Стрелочные вызовы функций в любом порядке
- Мапинг результатов
- Автокеширование
- Автоматическое получение свойств элементов, с возможностью отключить получение свойств
-
IblockQuery
- items()
- sections()
- filter($arFilter)
- sort($arSort)
- nav($arNav)
- select($arSelect)
- properties($bBoolean)
- cache($sCustomKey = 'iblock-query', $ttl = 3600)
- map($fnCallable)
- execute() => IblockQueryResult
-
IblockQueryResult
- all() // возвращает массив результата запроса
- nav() // данные о пагинации
- count()
Массивы $arSort, $arFilter, $arSelect, $arNav соответсвуют формату [https://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/getlist.php]
$arBadgesItems = IblockQuery::items()
->filter($arFilter)
->select($arSelect)
->sort($arSort)
->nav($arNav)
->properties(false) // выключает запрос на доп. свойства
->cache()
->map(function($arItem){
$arItem['PREVIEW_PICTURE'] = CFile::GetPath($arItem['PREVIEW_PICTURE']);
return $arItem;
})
->execute(); // возвращает экземляр класса IblockQueryResult
$arBadgesSections = IblockQuery::sections()
->filter($arFilter)
->select($arSelect)
->sort($arSort)
->nav($arNav)
->cache()
->execute()
->all();
Кеширование сработает уже после функции map(), поэтому запрос на картинки тоже сработает только 1 раз до кеширования.
cache($module = 'iblock-query', $ttl = 3600)
$arBadgesSections = IblockQuery::items()
->filter($arFilter)
->select($arSelect)
->sort($arSort)
->nav($arNav)
->properties(false)
->cache()
->map(function($arItem){
$arItem['PREVIEW_PICTURE'] = CFile::GetPath($arItem['PREVIEW_PICTURE']);
return $arItem;
})
->execute();
$arBadgesItems = IblockQuery::items()
->filter(['IBLOCK_ID' => $nBadgesIblockId])
->select(['ID', 'NAME', 'PROPERTY_COLOR'])
->execute();
$arBadgesSections = IblockQuery::sections()
->filter(['IBLOCK_ID' => $nBadgesIblockId])
->select(['ID', 'NAME', 'PROPERTY_COLOR'])
->execute();
$arBadgesItems = IblockQuery::items()
->filter($arFilter)
->select($arSelect)
->sort($arSort)
->nav($arNav)
->properties(false)
->cache()
->execute();