Блог

Добавление своей кнопки в админку Битрикса

Добавим кнопку на страницу просмотра/редактирования заказа в админке Битрикса

Прежде всего зарегистрируем обработчик в init.php
AddEventHandler('main', 'OnAdminContextMenuShow', 'OrderDetailAdminContextMenuShow'); 
 
// собственно сам обработчик 

function OrderDetailAdminContextMenuShow(&$items){
 if ($_SERVER['REQUEST_METHOD']=='GET' && $GLOBALS['APPLICATION']->GetCurPage()=='/bitrix/admin/sale_order_edit.php' && $_REQUEST['ID']>0)
    {
 $items[] = array(
            "TEXT"=>"Отправить письмо",
            "LINK"=>"javascript:mail_ms(".$_REQUEST['ID'].")",
            "TITLE"=>"Отправить письмо",
            "ICON"=>"adm-btn",
        );
    }
 if ($_SERVER['REQUEST_METHOD']=='GET' && $GLOBALS['APPLICATION']->GetCurPage()=='/bitrix/admin/sale_order_view.php' && $_REQUEST['ID']>0)
    {
 $items[] = array(
            "TEXT"=>"Отправить письмо",
            "LINK"=>"javascript:mail_ms(".$_REQUEST['ID'].")",
            "TITLE"=>"Отправить письмо",
            "ICON"=>"adm-btn",
        );
    }
}
Этот обработчик, как видим, будет отправлять письмо клиенту. Расшифруем самое главное:
TEXT - надпись на кнопке
LINK - в данном случае указана js-функция, но может быть и просто ссылка на файл
ICON - тип кнопки (внешний вид)

Чтобы вызов функции mail_ms() был возможен опишем ее в файле local/php_interface/admin_header.php. Этот файл автоматически подгружается в админке битрикса.


<script> 
// опишем всплывающее окно (средствами Битрикса)
 var Dialog = new BX.CDialog({
 title: "Отправить письмо",
 content: '<form method="POST" style="overflow:hidden;" action="button.php" id="mailform">\
 <textarea name="comment" id="comment" style="height: 78px; width: 374px;">Пишем текст сюда</textarea><br><br>\
 <input type="checkbox" name="sostav" id="sostav"><label for="sostav">Отправлять состав заказа</label>\
 </form>',
 icon: 'head-block',
 resizable: true,
 draggable: true,
 height: '200',
 width: '400',
 buttons: ['<input type="submit" class="btnSubmit" value="Отправить" />', BX.CDialog.btnCancel, BX.CDialog.btnClose]
 }); 
 
// теперь функция
 function mail_ms(id) {
 Dialog.Show(); // вызвали окно 
 
// теперь в ajax-е обратимся к странице, на которой выполним нужный нам код и отправим письмо 
 $('.btnSubmit').on('click', function () {
 var comment = $('#comment').val();
 if($('#sostav').is(":checked")) {var sostav = 'on';} else {var sostav = 'off';}

 $.ajax({
 type: 'GET',
 url: '/bitrix/admin/button.php',
 data: { id: id, comment: comment, sostav: sostav },
 success: function(data) {
// в случае успеха закроем окно
 Dialog.Close(); 
// и перезагрузим страницу
 location='<?=$_SERVER["REQUEST_URI"]?>';
 },
 error: function(xhr, str){
 alert('Возникла ошибка: ' + xhr.responseCode);
 }
 });
 })

 }
</script> 
В результате получим примерно это:

f3b3a62e2c1c820ed284fafcf331a0bd.png5f0c3e04dcdd9151275af51c57fe2449.png