Компонент — основа разработки под Битрикс. Правильная структура и кэширование ускоряют разработку и упрощают поддержку проекта.
Структура компонента
/local/components/myvendor/my.component/
├── .parameters.php
├── component.php
├── lang/ru/lang.php
└── templates/
└── .default/
├── template.php
└── style.css
component.php — логика
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
class MyComponent extends CBitrixComponent
{
public function onPrepareComponentParams($params): array
{
$params['CACHE_TIME'] ??= 3600;
return $params;
}
public function executeComponent(): void
{
if ($this->startResultCache()) {
$this->arResult['ITEMS'] = $this->getItems();
$this->includeComponentTemplate();
$this->endResultCache();
}
}
private function getItems(): array
{
return BitrixIblockElementTable::getList([
'filter' => ['=IBLOCK_ID' => $this->arParams['IBLOCK_ID']],
'select' => ['ID', 'NAME', 'DETAIL_PAGE_URL'],
'limit' => 10,
])->fetchAll();
}
}
template.php — шаблон
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
foreach ($arResult['ITEMS'] as $item): ?>
<div class="item">
<a href="<?= htmlspecialchars($item['DETAIL_PAGE_URL']) ?>">
<?= htmlspecialchars($item['NAME']) ?>
</a>
</div>
<?php endforeach;
Вызов на странице
$APPLICATION->IncludeComponent(
'myvendor:my.component',
'.default',
[
'IBLOCK_ID' => 5,
'CACHE_TYPE' => 'A',
'CACHE_TIME' => 3600,
]
);
Инвалидация кэша по тегу iblock
$taggedCache = Application::getInstance()->getTaggedCache();
$taggedCache->registerTag('iblock_id_' . $this->arParams['IBLOCK_ID']);
При изменении элемента в инфоблоке кэш компонента автоматически сбросится.
