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