Пример простого компонента внутри компонента в Битрикс:
Предположим, у нас есть компонент "Каталог товаров", который отображает список товаров на сайте. Внутри этого компонента мы хотим добавить функциональность для отображения комментариев к каждому товару. Для этого мы создадим новый простой компонент "Комментарии к товару".
1. Создание файлов компонента:
- Создайте папку "comments" в папке "components" вашего шаблона сайта (например, /local/templates/your_template/components);
- В папке "comments" создайте файлы "class.php" и "template.php".
2. Определение класса компонента (class.php):
<?php use BitrixMainLoader; if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); class CCommentsComponent extends CBitrixComponent { public function executeComponent() { if(Loader::includeModule('iblock')) { // получаем комментарии для текущего товара $this->arResult['COMMENTS'] = $this->getComments(); // передаем данные в шаблон компонента $this->includeComponentTemplate(); } } private function getComments() { // здесь реализуйте логику для получения комментариев к текущему товару, // например, можно использовать объекты класса CIBlockElement и CIBlockPropertyEnum // и выполнить запрос к соответствующим таблицам БД // возвращаем массив с комментариями return array( array( 'user' => 'user1', 'text' => 'Comment 1', ), array( 'user' => 'user2', 'text' => 'Comment 2', ), ); } }
3. Шаблон компонента (template.php):
<?php if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); if(!empty($arResult['COMMENTS'])): foreach($arResult['COMMENTS'] as $comment): ?> <div class="comment"> <div class="user"><?=$comment['user'];?></div> <div class="text"><?=$comment['text'];?></div> </div> <?php endforeach; endif;
4. Использование компонента "Комментарии к товару" внутри компонента "Каталог товаров":
- Откройте файл компонента "Каталог товаров" (например, components/catalog/template.php);
- Добавьте вызов компонента "Комментарии к товару" внутри цикла товаров:
<?php if (!empty($arResult['ITEMS'])): foreach ($arResult['ITEMS'] as $arItem): // вывод информации о товаре из компонента "Каталог товаров" echo $arItem['NAME'] . '<br>'; // вызов компонента "Комментарии к товару" $APPLICATION->IncludeComponent( 'your_template:comments', '', array(), false ); endforeach; endif; ?>
Теперь при выводе списка товаров будет также отображаться блок с комментариями к каждому товару, взятый из компонента "Комментарии к товару". В данном примере данные для комментариев хранятся прямо в методе getComments() класса CCommentsComponent, но обычно они должны быть получены из базы данных или из внешнего источника данных.
Надеюсь, что это поможет вам создать простой компонент внутри компонента в Битрикс.