Редактирование и удаление элементов и разделов из публичной части сайта Битрикс

В 1С-Битрикс управление сайтом есть замечательная возможность, которую очень ценят клиенты и контент-менеджеры. Речь идет о изменении, добавлении и удалении элементов и разделов инфоблока из публичной части сайта, разработанного на Битриксе. Запрограммированный правильным образом сайт имеет такую возможность — при включенном режиме редактирования наведя курсор например на товар, вверху появляются кнопки управления.

MAjppV0hnK4Wme

Далее, если мы планируем поменять информацию о товаре — жмем изменить. При этом всплывет окошко со всеми теми же полями и вкладками, что и при обычном редактировании из админки, но нам уже не нужно искать соответствующий элемент инфоблока и идти по структуре каталога.

Программирование кнопок редактирования

Очень часто при разработке сайта, например во время кастомизации шаблона компонента программист забывает добавить те строки кода без которых вышеописанное преимущество теряется. А именно, внутри цикла по элементам:

$this->AddEditAction($arItem['ID'], $arItem['EDIT_LINK'], CIBlock::GetArrayByID($arItem["IBLOCK_ID"], "ELEMENT_EDIT"));
$this->AddDeleteAction($arItem['ID'], $arItem['DELETE_LINK'], CIBlock::GetArrayByID($arItem["IBLOCK_ID"], "ELEMENT_DELETE"), array("CONFIRM" => GetMessage('CT_BNL_ELEMENT_DELETE_CONFIRM')));

далее задается id для DOM элемента в html, который является контейнером при отображении информации  об элементе инфоблока на странице, например если это div:

<div id="<?=$this->GetEditAreaId($arItem['ID']);?>">

При нехватке данных

Внутри шаблона доступны данные, нужные для формирования кнопок редактирования, они содержатся в результирующем массиве для каждого элемента:

$arItem['EDIT_LINK']
$arItem['DELETE_LINK']

Но иногда требуется организовать эти кнопки в шаблоне, где вышеупомянутые данные недоступны, например если мы в списке разделов каталога catalog.section.list получили отдельно в result_modifier.php по нескольку элементов для каждого раздела. Данные EDIT_LINK и DELETE_LINK можно получить зная ID инфоблока и элемента или раздела (в зависимости для чего мы хотим получить кнопки редактирования):

$arButtons = CIBlock::GetPanelButtons(
    $IBLOCK_ID,
    $ELEMENT_ID, // указываем либо ID элемента, либо ID раздела ниже
    $SECTION_ID
);

Будет возвращен массив, в котором, в числе прочего, будут содержаться и искомые данные. Присвоим их переменным для удобства:

$editLink = $arButtons["edit"]["edit_element"]["ACTION_URL"];
$deleteLink = $arButtons["edit"]["delete_element"]["ACTION_URL"];

Или в случае когда мы это проделываем для разделов инфоблока:

$editLink = $arButtons["edit"]["edit_section"]["ACTION_URL"];
$deleteLink = $arButtons["edit"]["delete_section"]["ACTION_URL"];

И далее уже можем выполнять функции AddEditAction и AddDeleteAction, которые приводились в начале статьи и получать id для html элемента.