Создание класса для компонента bitrix

Бывают ситуации, когда появляется желание создать отдельную логику для компонента, где, например, происходят различные операции с таблицами. Ну или еще для чего. Такие вещи надо модулем делать, конечно же, но если очень хочется, то можно) К делу:

Например есть у нас компонент test.my_table

В папке компонента (где находится component.php) создаем class.php. В этом файле расширяем стандартный класс компонента CBitrixComponent, например вот так:

class CMyComponent extends CBitrixComponent{
    // Создаем таблицу
    public function createTable(){
        global $DB;
        $strSql = "
            CREATE TABLE IF NOT EXISTS `my_table` (
                `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
                `date_create` DATETIME DEFAULT CURRENT_TIMESTAMP,
                `date_modified` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
                `name` VARCHAR(255) NOT NULL DEFAULT '',
                `xml_id` VARCHAR(100) NOT NULL DEFAULT '',
                `active` TINYINT UNSIGNED NOT NULL DEFAULT 1,
                PRIMARY KEY (`id`)
            );
        ";
        $res = $DB->Query($strSql, false);
        return $res;
    }
    // Добавляем данные в таблицу
    public function insertTable(){
        global $DB;
        $strSql = "
        INSERT INTO `my_table` 
            (`name`, `xml_id`) 
        VALUES
            ('Test 1', '00001'),
            ('Test 2', '00002'),
            ('Test 3', '00003')
        ;";
        $req = $DB->Query($strSql, false);
        return $req;
    }
    // Получаем данные
    public function getTable(){
        global $DB;
        $strSql = "
            SELECT 
                `my_table`.`id`,
                `my_table`.`name` 
            FROM 
                `my_table`
        ;";
        $req = $DB->Query($strSql, false);
        $arRes = [];
        while ($res = $req->Fetch()) {
            $arRes[] = $res;
        }
        return $arRes;
    }
}

Теперь в компоненте (component.php) можно использовать эти методы класса:

$this->createTable();
$this->insertTable();
$arResult['data'] = $this->getTable();

Чтобы использовать этот класс компонента вне его, например в другом компоненте или на странице сайта, то можно вызвать его так:

CBitrixComponent::includeComponentClass("bitrix:test.my_table");
$cMyComp = new CMyComponent();
$arResult['data'] = $cMyComp->getTable();

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *