Highloadblock Helper

Highload-блоки в Битриксе — мощный инструмент для хранения и обработки больших объемов данных, но стандартный API требует немало шаблонного кода. Чтобы упростить эту задачу, можно воспользоваться классом Bitrix Highloadblock Helper, который значительно облегчает взаимодействие с Highload-блоками, делая код чище и понятнее.

Этот класс автоматизирует рутинные операции: создание и получение сущностей, выборку данных, работу с фильтрами и многое другое. Он снижает вероятность ошибок, улучшает читаемость кода и ускоряет разработку.

Ниже представлен сам класс HighloadblockHelper.

<?php

/*
 * Load highload-block
 * */
CModule::IncludeModule('highloadblock');

use Bitrix\Highloadblock as HL;
use Bitrix\Main\Entity;
use Bitrix\Sale\Helpers\Admin;

class HighloadblockHelper
{
    /*
     * Search in highload-block need row
     * */
    public static function searchHighloadBlockItem($id, $arFilter = array(), $limit = false, $arOrder = array())
    {
        $hlblock = HL\HighloadBlockTable::getById($id)->fetch();
        $entity = HL\HighloadBlockTable::compileEntity($hlblock);
        $entity_data_class = $entity->getDataClass();
        $entity_table_name = $hlblock['TABLE_NAME'];
        $sTableID = 'tbl_' . $entity_table_name;
        $rsData = $entity_data_class::getList(array(
                    "select" => array('*'),
                    "filter" => $arFilter,
                    "order" => $arOrder,
                    "limit" => $limit,
        ));
        $rsData = new CDBResult($rsData, $sTableID);
        if (!empty($rsData)) {
            while ($row = $rsData->Fetch()) {
                $arRes[] = $row;
            }
            if (!empty($arRes)) {
                return $arRes;
            }
        }
        return false;
    }

    public function getCountHighloadBlockItem($id, $arFilter = array())
    {
        $hlblock = HL\HighloadBlockTable::getById($id)->fetch();
        $entity = HL\HighloadBlockTable::compileEntity($hlblock);
        $entity_data_class = $entity->getDataClass();
        $entity_table_name = $hlblock['TABLE_NAME'];
        $sTableID = 'tbl_' . $entity_table_name;
        $rsData = $entity_data_class::getList(array(
                    "select" => array("CNT"),
                    "filter" => $arFilter,
                    "runtime" => array(
                        new Entity\ExpressionField('CNT', 'COUNT(*)')
                    )
        ));
        $rsData = new CDBResult($rsData, $sTableID);
        if (!empty($rsData)) {
            while ($row = $rsData->Fetch()) {
                $arRes[] = $row;
            }
            if (!empty($arRes)) {
                return $arRes;
            }
        }
        return false;
    }

    /**
     * @param $id
     * @param array $arFilter
     * @return array|bool
     */
    public static function getHighloadBlockItemRandom($id, $arFilter = array())
    {
        /**
         * @var $entity_data_class ReadyCodesTable
         */
        $hlblock = HL\HighloadBlockTable::getById($id)->fetch();
        $entity = HL\HighloadBlockTable::compileEntity($hlblock);
        $entity_data_class = $entity->getDataClass();


        $entity_table_name = $hlblock['TABLE_NAME'];
        $sTableID = 'tbl_' . $entity_table_name;
        $q = new Entity\Query($entity);
        $q->setSelect(array('*'));
        $q->setFilter($arFilter);
        $q->setLimit(1);
        $q->registerRuntimeField(
                'RAND', array('data_type' => 'float', 'expression' => array('RAND()'))
        );
        $q->addOrder("RAND", "ASC");
        $result = $q->exec();
        if (!empty($result)) {
            while ($row = $result->Fetch()) {
                $arRes[] = $row;
            }
            if (!empty($arRes)) {
                return $arRes;
            }
        }
        return false;
    }

    /*
     * Update need highload block element
     * */

    public static function updateHighloadBlockItem($idBlock, $idElement, $data)
    {
        $hlblock = HL\HighloadBlockTable::getById($idBlock)->fetch();
        $entity = HL\HighloadBlockTable::compileEntity($hlblock);
        $entity_data_class = $entity->getDataClass();
        $result = $entity_data_class::update($idElement, $data);
        return $result;
    }

    /*
     * Create new highloa block element
     * */

    public static function createHighloadBlockItem($idBlock, $data)
    {
        $hlblock = HL\HighloadBlockTable::getById($idBlock)->fetch();
        $entity = HL\HighloadBlockTable::compileEntity($hlblock);
        $entity_data_class = $entity->getDataClass();
        $result = $entity_data_class::add($data);
        return $result;
    }

    /*
     * Delete highload block element
     * */

    public static function deleteHighloadBlockItem($idBlock, $idElement)
    {
        $hlblock = HL\HighloadBlockTable::getById($idBlock)->fetch();
        $entity = HL\HighloadBlockTable::compileEntity($hlblock);
        $entity_data_class = $entity->getDataClass();
        $result = $entity_data_class::Delete($idElement);
        return $result;
    }

}

Рубрики: Bitrix

Если есть вопросы, что-то в статье не понятно или нашли ошибку, напишите об этом в комментариях, все комментарии читаются и по возможности материал будет доработан.
Популярные статьи

Полезные материалы по Битрикс

Решили собрать все полезные материалы, которые могут пригодится при работе с Битрикс, в одной статье.

Кандинский 3.1 и обновление телеграмм бота

В статье описаны изменения телеграм бота и сравниваются результаты генерации изображений в новой и предыдущей версиях kandinsky.

Основные команды Linux

В статье приведены примеры команд для работы с пользователями и группами, файлами и каталогами.

Bitrix куда писать AddEventHandler

В статье дается ответ о том куда лучше всего добавить AddEventHandler, чтобы от точно сработал.

Битрикс пропали статусы веб-форм

В статье описана новая настройка модуля веб-форм которая скрывает вкладки Статусы и Поля со страницы редактирования веб-формы

Bitrix получить путь до зарегистрированного файла

В статье приводится пример того как можно получить путь до зарегистрированного файла по его ID с помощью метода CFile::getPath($fileId). Так же показано где можно получить ID зарегистрированного файла.

Комментарии

Гость [05.07.2023]
Круто, пригодилось
Данный сайт использует файлы cookies. Продолжая просмотр сайта, вы соглашаетесь с использованием файлов cookies.
ОК