Кастомная кнопка в админке списка заказов

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

Чтобы вывести свою кнопку в списке разделов, воспользуемся обработчиком события "OnProlog" главного модуля (опишу пока в формате старого ядра, т.к. сайт не обновляется уже больше года:():

AddEventHandler("main", "OnProlog", array("clInitMaxline", "OnEndBufferContentHandler"));
AddEventHandler("main", "OnProlog", array("clInitMaxline", "OnEndBufferContentHandler"));
class clInitMaxline{
	function OnEndBufferContentHandler()
	{
        if (defined("ADMIN_SECTION") && $GLOBALS["APPLICATION"]->GetCurPage() == "/bitrix/admin/sale_order.php")
		{
            // подключаем обработчик для нужной страницы в админ-панели
            // нам нужен JQUERY, чтобы с его помощью производить манипуляции с dom-структурой
            \CJSCore::Init(array("jquery"));
            // дальше формируем тот кусок js-кода, который нужно добавить на нужной странице:
            ob_start();
            ?><script type="text/javascript">
                var printjQ = false;
                function initOrderPrintBtnJQ() {
                    var pathName = window.location.pathname;
                    if (pathName == "/bitrix/admin/sale_order.php" && !printjQ) {
                        $(function () {
                            $('#tbl_sale_order_result_div .adm-list-table-top').append(
                                '<a class="adm-btn adm-btn-save" href="javascript:void(0)" ' +
                                'id="btnPrintOrder" ' +
                                'data-action="/путь к обработчику ajax-запроса" ' +
                                'title="Вывести на печать" >' +
                                'Вывести на печать' + '</a>'
                            );

                            $('#tbl_sale_order_result_div').on('click', 'a#btnPrintOrder', function () {
                                var that = this;
                                var orders = [];
                                var table = $('#tbl_sale_order');
                                table.find('tbody tr.adm-list-table-row').each(function () {
                                    var orderID = $(this).find('input[name="ID[]"]').val();
                                    orders.push(parseInt(orderID));
                                });

                                if ($(that).data('action') !== undefined) {
                                    $.post($(that).data('action'),{orders: orders},
                                        function (data) {
                                            // тут обрабатываем полученный результат - если с сервера вернулся url-файла - просто отдаем этот файл на загрузку
                                            if(data.url!==undefined){
                                                 window.location.href = data.url;
                                            }
                                        }
                                    );
                                }

                                return false;
                            });
                            printjQ = true;
                        });
                    }
                }
                initOrderPrintBtnJQ();
            </script><?
            $sContent = ob_get_clean();
			$GLOBALS['APPLICATION']->AddHeadString($sContent);
        }
    }
}

Все! Таким образом, рядом с кнопками "Добавить заказ" и "Архивирование заказов" появится еще одна, наша кнопка. При нажатии на данную кнопку, будут получены все заказы с текущей страницы (если нужно обрабатывать все заказы - тут можно обрабатывать url - разбирать параметры адресной строки, вытягивать из них фильтр и отправлять уже не ID-шники товаров, а параметры для выборки заказов из базы). Оставется реализовать скрипт, принимающий ajax-запрос и производящий обработку данных.

Количество показов: 4434
03.06.2018

Возврат к списку

Если вам была полезна статья можете отблагодарить автора:
Ethereum:

0x16Df809287333C49D3A237296C6248A6c08702Bc

Разработка сайта

Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...

Сопровождение сайта

Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение

Работы по сайту

Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.