Бывают ситуации, когда появляется желание создать отдельную логику для компонента, где, например, происходят различные операции с таблицами. Ну или еще для чего. Такие вещи надо модулем делать, конечно же, но если очень хочется, то можно) К делу:
Например есть у нас компонент 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();