Бывают ситуации, когда появляется желание создать отдельную логику для компонента, где, например, происходят различные операции с таблицами, ну или еще для чего.
Важно: в примере используются прямые запросы, а нужно использовать D7 ORM методы.
К делу:
Например есть у нас компонент test.my_table
В папке компонента (где находится component.php) создаем class.php. В этом файле расширяем стандартный класс компонента CBitrixComponent, например вот так:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
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) можно использовать эти методы класса:
|
1 2 3 |
$this->createTable(); $this->insertTable(); $arResult['data'] = $this->getTable(); |
Чтобы использовать этот класс компонента вне его, например в другом компоненте или на странице сайта, то можно вызвать его так:
|
1 2 3 |
CBitrixComponent::includeComponentClass("bitrix:test.my_table"); $cMyComp = new CMyComponent(); $arResult['data'] = $cMyComp->getTable(); |