Загрузка элементов Highloadblock через D7 ORM
Работа с Highloadblock через \Bitrix\Main\Entity\DataManager с выборкой, фильтрацией и кешированием данных.
Как использовать
- Скопируйте нужный фрагмент кода.
- Вставьте в свой проект и при необходимости измените под задачу.
- Проверьте зависимости и окружение (версии, переменные).
Загрузка данных из Highloadblock через D7 ORM API. Используйте для работы со справочниками, дополнительными таблицами данных вместо прямых SQL-запросов.
use Bitrix\Main\Loader;
use Bitrix\Highloadblock\HighloadBlockTable;
/**
* Получить DataManager для Highloadblock
* @param string $tableName Имя таблицы Highloadblock
* @return \Bitrix\Main\Entity\DataManager|null
*/
function getHLDataManager($tableName) {
if (!Loader::includeModule('highloadblock')) {
return null;
}
// Получаем ID Highloadblock по имени таблицы
$hlblock = HighloadBlockTable::getList([
'filter' => ['=TABLE_NAME' => $tableName]
])->fetch();
if (!$hlblock) {
return null;
}
// Получаем класс DataManager
$entity = HighloadBlockTable::compileEntity($hlblock);
return $entity->getDataClass();
}
/**
* Получить элементы Highloadblock
* @param string $tableName Имя таблицы
* @param array $filter Фильтр ['UF_FIELD' => 'value']
* @param array $order Сортировка ['UF_SORT' => 'ASC']
* @param int $limit Лимит записей
* @return array Массив элементов
*/
function getHLElements($tableName, $filter = [], $order = [], $limit = 0) {
$dataClass = getHLDataManager($tableName);
if (!$dataClass) {
return [];
}
$params = [
'select' => ['*'],
'filter' => $filter
];
if (!empty($order)) {
$params['order'] = $order;
}
if ($limit > 0) {
$params['limit'] = $limit;
}
$result = $dataClass::getList($params);
$items = [];
while ($item = $result->fetch()) {
$items[] = $item;
}
return $items;
}
/**
* Получить один элемент Highloadblock по ID
* @param string $tableName Имя таблицы
* @param int $id ID элемента
* @return array|false
*/
function getHLElementById($tableName, $id) {
$dataClass = getHLDataManager($tableName);
if (!$dataClass) {
return false;
}
return $dataClass::getById($id)->fetch();
}
Usage:
// Получить все элементы справочника городов
$cities = getHLElements('b_hlbd_cities', [], ['UF_NAME' => 'ASC']);
// Получить элементы с фильтром
$activeItems = getHLElements('b_hlbd_statuses', ['UF_ACTIVE' => 1], ['UF_SORT' => 'ASC']);
// Получить один элемент
$city = getHLElementById('b_hlbd_cities', 5);
if ($city) {
echo $city['UF_NAME'];
}
Notes:
⚠️ Имя таблицы должно начинаться с b_hlbd_ (префикс Bitrix для Highloadblock). Для получения имени таблицы используйте HighloadBlockTable::getList() или смотрите в админке. Все пользовательские поля имеют префикс UF_. Модуль highloadblock должен быть подключен.