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

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

30
03.06.2018

Встала передо мной задача выводить выбираемые менеджером заказы на печать. Для того, чтобы не переписывать лишний раз функционал вывода заказов пользователя, решил привязаться к системной странице со списком заказов в админ-панели. Для этого нужно просто добавить в этом списке кнопку и 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-запрос и производящий обработку данных.



Благодарю за внимание! Делитесь вашими замечаниями в комментариях ниже.


P.S. Обращайтесь ко мне за приобретением лицензий и продлений на 1C-Битрикс "Управление сайтом", лицензий на облачную и коробочную версии Битрикс 24 а также за приобретением и внедрением готовых решений на базе 1С-Битрикс от партнеров. За более подробной информацией свяжитесь со мной любым удобным для вас способом


Комментарии

Еще никто не комментировал данную публикацию. Будьте первыми!

Добавить комментарий

captcha

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