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

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

Кнопки редактирования

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

Всплывающее окно редактирования Битрикс

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

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

$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 элемента.

 

Похожие статьи

Статья оказалась полезной? Вырази благодарность - поделись в соцсетях

Комментирование отключено