Кастомизация админки Битрикса - Вклиниваемся в меню действий в списке

Кастомизируем админку Битиркса по-уму - ловим событие OnAdminListDisplay .[spoiler]
В init.php создадим обработчик события:

 AddEventHandler("main", "OnAdminListDisplay", "MyOnAdminListDisplay");
function MyOnAdminListDisplay(&$list)
{
    if ($list->table_id=="tbl_sale_order") {//если это страница списка заказов, для других страниц админки будет  
свой table_id - чтобы его узнать, распечатайте входящий массив $list на нужной странице
        foreach ($list->aRows as $row){ // здесь мы вклиниваемся в контекстное меню каждой строки таблицы
            $row->aActions["all_orders"]["ICON"] = "";
            $row->aActions["all_orders"]["TEXT"] = "Все заказы пользователя";
            $row->aActions["all_orders"]["ACTION"] = "javascript:orders_ms(".$row->id.")";  // здесь мы объявляем  
действие - js-функция orders_ms(), в которую будем передавать параметр (в данном случае id заказа)  
      }  
      // $list->arActions["status_draft"] = "Все заказы пользователя"; // а здесь попадаем в меню групповых  
действий  над элементами над элементами
    }
} 
 
Фактически можно вклиниться в любое место списка  - достаточно просто изучить входящий массив данных
Чтобы функция orders_ms() могла выполниться мы опишем ее в файле, который загружается в начале подгрузки административных страниц Битрикса  - /bitrix/php_interface/admin_header.php (если его нет - создайте)

В данном случае мы хотим, чтобы при нажатии на новый  пункт контекстного меню появлялось всплывающее окно с какой-то информацией. Значит в admin_header.php пишем скрипт:

<script>
    // опишем всплывающее окно (средствами Битрикса)
    var Dialog = new BX.CDialog({
        title: "Все заказы пользователя",
        content: '<div id="all_orders"></div>', // в этот div будем вставлять инфу, полученную функцией orders_ms()
        icon: 'head-block',
        resizable: true,
        draggable: true,
        height: '400',
        width: '600',
        buttons: [BX.CDialog.btnClose]
    });

    // теперь функция
    function orders_ms(id) { 
// теперь в ajax-е обратимся к странице, на которой выполним нужный нам код и отправим письмо
        BX.ready(function () {
            BX.ajax({
                method: 'GET',
                dataType: 'html',
                url: '/bitrix/admin/all_orders.php?id='+id,
                data: { id: id },
                onsuccess: function(data){
                    BX('all_orders').innerHTML = data; 
              Dialog.Show(); // вызвали окно, которое описано выше
                },
                onfailure: function(){
                    alert('Возникла ошибка');
                }
            });
        })
    }
</script> 
На странице /bitrix/admin/all_orders.php можно выполнить любые, нужные нам запросы и сформировать html, который и увидит пользователь во всплывающем окне.
a2a0b0846921743c6a81d7b21f8b7d2e.jpgc3d42401a82c4deab4a220003fb776e5.jpg