Задача: добавить режим редактирования и удаления элементов в собственном компоненте.

Компонент вывода элементов инфоблока
Предположим, у нас есть собственный компонент, который выводит названия элементов инфоблока. Файл component.php:
use Bitrix\Iblock\ElementTable;
$arParams['IBLOCK_ID'] = 12; // ID инфоблока
$Elements = ElementTable::getList([
'filter' => [
'IBLOCK_ID' => $arParams['IBLOCK_ID'],
],
'select' => [
'ID',
'NAME',
]
])->fetchAll();
foreach ($Elements as $Element) {
$arResult['ELEMENTS'][$Element['ID']] = $Element;
}
Файл template.php:
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
foreach ($arResult['ELEMENTS'] as $ELEMENT) {?>
<div>
<? echo $ELEMENT['NAME']; ?>
</div>
<? }
Режим правки через API битрикс
Для добавления режима редактирования используем статический метод CIBlock::GetPanelButtons, который возвращает массив с кнопками управления элементами инфоблока.
Полученный массив кнопок нужно добавить к каждому элементу. Cначала в component.php:
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
use Bitrix\Iblock\ElementTable;
$arParams['IBLOCK_ID'] = 12; // ID инфоблока
$Elements = ElementTable::getList([
'filter' => [
'IBLOCK_ID' => $arParams['IBLOCK_ID'],
],
'select' => [
'ID',
'NAME',
]
])->fetchAll();
foreach ($Elements as $Element) {
$arButtons = CIBlock::GetPanelButtons(
$arParams['IBLOCK_ID'],
$Element['ID']
);
$arResult['ELEMENTS'][$Element['ID']] = $Element;
// Кнопка редактирования
$arResult['ELEMENTS'][$Element['ID']]['EDIT_BUTTON'] = $arButtons['edit']['edit_element']['ACTION_URL'];
// Кнопка удаления
$arResult['ELEMENTS'][$Element['ID']]['DELETE_BUTTON'] = $arButtons['edit']['edit_element']['ACTION_URL'];
}
$this->includeComponentTemplate();
И в template.php добавляем вывод кнопок эрмитажа, не забываем прописать id c $this->GetEditAreaId что бы кнопки привязались к соотвествующему элементу:
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
foreach ($arResult['ELEMENTS'] as $ELEMENT) {
$this->AddEditAction(
$ELEMENT['ID'],
$ELEMENT['EDIT_BUTTON'],
CIBlock::GetArrayByID(
$ELEMENT["IBLOCK_ID"],
"ELEMENT_EDIT"
)
);
$this->AddDeleteAction(
$ELEMENT['ID'],
$ELEMENT['DELETE_BUTTON'],
CIBlock::GetArrayByID(
$ELEMENT["IBLOCK_ID"],
"ELEMENT_DELETE"
),
array(
"CONFIRM" => GetMessage(
'CT_BNL_ELEMENT_DELETE_CONFIRM'
)
)
);
?>
<div id="<?= $this->GetEditAreaId($ELEMENT['ID']); ?>">
<? echo $ELEMENT['NAME']; ?>
</div>
<? }
Теперь компонент не только выводит элементы инфоблока, но и позволяет их редактировать и удалять через API Битрикс.