1С-Битрикс предоставляет мощный инструментарий для обеспечения эффективной работы ваших проектов. Одним из способов управления Highload блоками в Битриксе является использование API, позволяющего вам получать и манипулировать информацией о блоках. В этой статье мы рассмотрим, как получить список всех Highload блоков с помощью API Битрикс.
Шаг 1: Подключение к модулю HighloadBlock
Перед тем как начать взаимодействие с Highload блоками, убедитесь, что вы находитесь в правильном контексте. Вам нужно будет подключить модуль highloadblock и убедиться, что он доступен для использования. Это можно сделать следующим образом:
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');
CModule::IncludeModule('highloadblock');
Шаг 2: Получение списка Highload блоков
Для получения списка всех Highload блоков мы будем использовать метод getList() из класса Bitrix\Highloadblock\HighloadBlockTable. Этот метод возвращает итератор, который мы будем использовать для обхода и извлечения информации о блоках:
use Bitrix\Highloadblock as HL;
// Получаем список всех Highload блоков
$hlblockList = [];
$hlblockIterator = HL\HighloadBlockTable::getList();
while ($hlblock = $hlblockIterator->fetch()) {
$hlblockList[] = $hlblock;
}
Шаг 3: Вывод информации о блоках
Для получения списка всех Highload блоков мы будем использовать метод getList() из класса Bitrix\Highloadblock\HighloadBlockTable. Этот метод возвращает итератор, который мы будем использовать для обхода и Теперь, когда у нас есть список Highload блоков, мы можем вывести информацию о каждом из них. Давайте выведем ID и название каждого блока:
// Выводим список Highload блоков
foreach ($hlblockList as $hlblock) {
echo "ID: {$hlblock['ID']}, Название: {$hlblock['NAME']}" . PHP_EOL;
}
Допустим, у вас есть несколько Highload блоков: Products, Orders, Customers. Применяя вышеописанный код, вы сможете выводить не только их ID и названия, но и более подробную информацию о каждом блоке, такую как поля, структуру данных и т.д.
Пример использования: создание компонента на базе HL-блоков
Например, это можно использовать при создании собственного компонента который работает с Hl-блоками. Более продробный пример с применением в видео:
Создание компонента из HL-блока
Файл .paramets.php:
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
/** @var array $arCurrentValues */
/** @global CUserTypeManager $USER_FIELD_MANAGER */
use Bitrix\Main\Loader;
use Bitrix\Highloadblock as HL;
use Bitrix\Main\Entity;
use Bitrix\Main\Localization\Loc;
Loader::includeModule('highloadblock');
// Получаем список всех Highload блоков
$arHlBlocksList = [];
$hlblockIterator = HL\HighloadBlockTable::getList();
while ($hlblock = $hlblockIterator->fetch()) {
$arHlBlocksList[$hlblock['ID']] = '['.$hlblock['ID'].'] '.$hlblock['NAME'];;
}
if (!empty($arCurrentValues['HL_BLOCK'])) {// Получаем поля выбранного HL блока
$hlblockId = $arCurrentValues['HL_BLOCK'];
// Получаем информацию о Highload блоке
$hlblock = HL\HighloadBlockTable::getById($hlblockId)->fetch();
// Получаем описание сущности Highload блока
$hlEntity = HL\HighloadBlockTable::compileEntity($hlblock);
// Получаем список полей сущности
$hlFields = $hlEntity->getFields();
// Выводим список доступных полей
foreach ($hlFields as $fieldName => $field) {
$arHlBlocksFields[$fieldName] = $fieldName;
}
}
$arComponentParameters = array(
'PARAMETERS' => array(
'SEF_MODE' => array(),
'HL_BLOCK' => array(
'PARENT' => 'BASE',
'NAME' => 'Выберите HL блок',
'TYPE' => 'LIST',
'VALUES' => $arHlBlocksList,
'REFRESH' => 'Y',
),
'HL_BLOCK_FIELDS_NAME' => array(
'PARENT' => 'BASE',
'NAME' => 'Поле с названием слайда',
'TYPE' => 'LIST',
'VALUES' => $arHlBlocksFields,
'REFRESH' => 'N',
//'HIDDEN' => (empty($arCurrentValues['HL_BLOCK']) ? 'N' : 'Y')
),
'HL_BLOCK_FIELDS_LINK' => array(
'PARENT' => 'BASE',
'NAME' => 'Поле с ссылкой со слайда',
'TYPE' => 'LIST',
'VALUES' => $arHlBlocksFields,
'REFRESH' => 'N',
),
'HL_BLOCK_FIELDS_PICTURE' => array(
'PARENT' => 'BASE',
'NAME' => 'Поле с картинкой слайда',
'TYPE' => 'LIST',
'VALUES' => $arHlBlocksFields,
'REFRESH' => 'N',
),
),
);
Файл .component.php:
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
$this->setFrameMode(false);
use Bitrix\Highloadblock as HL;
use Bitrix\Main\Entity;
$arResult = [];
$hlbl = (int)$arParams['HL_BLOCK'];
$hlblock = HL\HighloadBlockTable::getById($hlbl)->fetch();
$entity = HL\HighloadBlockTable::compileEntity($hlblock);
$entity_data_class = $entity->getDataClass();
$rsData = $entity_data_class::getList(array(
'order' => array(
'ID' => 'ASC'
),
'cache' => [
'ttl' => 3600 // можно в параметр
],
)); // можно ->fetchAll()
while($arData = $rsData->Fetch()){
if ($arData[$arParams['HL_BLOCK_FIELDS_PICTURE']]) { //CFile::GetFileArray
$arData[$arParams['HL_BLOCK_FIELDS_PICTURE']] = CFile::GetPath($arData[$arParams['HL_BLOCK_FIELDS_PICTURE']]);
}
$arResult[$arData['ID']]['NAME'] = $arData[$arParams['HL_BLOCK_FIELDS_NAME']];
$arResult[$arData['ID']]['LINK'] = $arData[$arParams['HL_BLOCK_FIELDS_LINK']];
$arResult[$arData['ID']]['PICTURE'] = $arData[$arParams['HL_BLOCK_FIELDS_PICTURE']];
}
$this->includeComponentTemplate();