Работа с Highload блоками в d7
В этой статье представлены методы, которые наиболее часто применяются в работе с HighloadBlock
в Битрикс.
HighloadBlock
это аналог инфоблока 1С Битрикс, как уверяют разработчики, он гораздо проще и легче, также эти таблицы гораздо больше подходят для высоконагруженных проектов.
В данном примере, мы будем работать с HighloadBlock
через ORM
в качестве массива, для HighloadBlock
в ORM
доступны все сущности что и для обычных инфоблоков включая объекты!
Во всех последующих примерах мы будем работать с таблицей следующей структуры:
Список всех highload блоков
// пространства имен highloadblock
use Bitrix\Highloadblock\HighloadBlockTable;
// подключаем модуль highloadblock
\Bitrix\Main\Loader::includeModule("highloadblock");
// стандартный запрос getList
$arHlData = HighloadBlockTable::getList(array(
'select' => array("ID", "NAME"),
'order' => array('ID' => 'ASC'),
'limit' => '50',
));
// формируем массив данных
while ($arHlbk = $arHlData->Fetch()) {
$arrHlblocks[$arHlbk['ID']] = $arHlbk['NAME'];
}
Выборка записи
// пространства имен highloadblock
use Bitrix\Highloadblock\HighloadBlockTable;
// подключаем модуль highloadblock
\Bitrix\Main\Loader::includeModule("highloadblock");
// делаем выборку хайлоуд блока с ID 4
$arHLBlock = Bitrix\Highloadblock\HighloadBlockTable::getById(4)->fetch();
// инициализируем класс сущности хайлоуд блока с ID 4
$obEntity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity($arHLBlock);
// обращаемся к DataManager
$strEntityDataClass = $obEntity->getDataClass();
// стандартный запрос getList
$rsData = $strEntityDataClass::getList(array(
// необходимые для выборки поля
'select' => array('ID', 'UF_NAME', 'UF_FILE'),
'filter' => array('=ID' => 1)
));
// формируем массив данных
while ($arItem = $rsData->Fetch()) {
$arItems[] = $arItem;
}
Добавление записи
// пространства имен highloadblock
use Bitrix\Highloadblock\HighloadBlockTable;
// подключаем модуль highloadblock
\Bitrix\Main\Loader::includeModule("highloadblock");
// делаем выборку хайлоуд блока с ID 4
$arHLBlock = Bitrix\Highloadblock\HighloadBlockTable::getById(4)->fetch();
// инициализируем класс сущности хайлоуд блока с ID 4
$obEntity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity($arHLBlock);
// обращаемся к DataManager
$strEntityDataClass = $obEntity->getDataClass();
// массив значений новой записи
$arElementFields = array(
'UF_NAME' => "Тест",
'UF_FILE' => "",
'UF_LINK' => "",
'UF_SORT' => 100,
'UF_DEF' => "",
'UF_XML_ID' => "test",
);
// добавляем данные
$obResult = $strEntityDataClass::add($arElementFields);
// можем сразу полочить информацию о добавленом поле
$ID = $obResult->getID();
$bSuccess = $obResult->isSuccess();
Изменение записи
// пространства имен highloadblock
use Bitrix\Highloadblock\HighloadBlockTable;
// подключаем модуль highloadblock
\Bitrix\Main\Loader::includeModule("highloadblock");
// делаем выборку хайлоуд блока с ID 4
$arHLBlock = Bitrix\Highloadblock\HighloadBlockTable::getById(4)->fetch();
// инициализируем класс сущности хайлоуд блока с ID 4
$obEntity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity($arHLBlock);
// обращаемся к DataManager
$strEntityDataClass = $obEntity->getDataClass();
// поля которые нужно обновить
$fields = array(
'UF_NAME' => "Фиолетовый Тест",
);
// 1, это id обновляемой записи
$result = $strEntityDataClass::update(1, $fields);
Удаление записи
// пространства имен highloadblock
use Bitrix\Highloadblock\HighloadBlockTable;
// подключаем модуль highloadblock
\Bitrix\Main\Loader::includeModule("highloadblock");
// делаем выборку хайлоуд блока с ID 4
$arHLBlock = Bitrix\Highloadblock\HighloadBlockTable::getById(4)->fetch();
// инициализируем класс сущности хайлоуд блока с ID 4
$obEntity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity($arHLBlock);
// обращаемся к DataManager
$strEntityDataClass = $obEntity->getDataClass();
// 1, это id удаляемой записи
$result = $strEntityDataClass::Delete(1);
Обращение к HighloadBlock по имени таблицы БД
// пространства имен highloadblock
use Bitrix\Highloadblock\HighloadBlockTable;
// подключаем модуль highloadblock
\Bitrix\Main\Loader::includeModule("highloadblock");
// делаем выборку хайлоуд блока по названию таблицы
$hlblock = \Bitrix\Highloadblock\HighloadBlockTable::getList(
array(
"filter" => array(
'=TABLE_NAME' => 'b_hlbd_kassovoeoborudovanie'
)
)
)->fetch();
// инициализируем класс сущности по названию таблицы
$entity = \Bitrix\Highloadblock\HighloadBlockTable::compileEntity($hlblock);
// обращаемся к DataManager
$entity_data_class = $entity->getDataClass();
// стандартный запрос getList
$res = $entity_data_class::getList(array(
'select' => array('ID', 'UF_NAME', 'UF_FILE'),
'filter' => array('=ID' => 1)
));
// формируем массив данных
while ($arItem = $res->Fetch()) {
$arItems[] = $arItem;
}
Работа со свойствами
Заметка подойдет для получения значений любого UF
поля, не обязательно связанного с HighloadBlock
, но и разделов.
Множественное свойство список
Что бы получить значения со всей информацией о выбранных пунктах списка, множественного поля, используем CUserFieldEnum::GetList
:
// включаем метод
$obEnum = new \CUserFieldEnum;
// делаем запрос, передав ID множественного свойства UF
$rsEnum = $obEnum->GetList(
array(),
array("ID" => ID_множественного_свойства)
);
// получаем ответ
while ($arEnum = $rsEnum->Fetch()) {
pp($arEnum);
}
Файл
CFile::GetFileArray(ID_файла)