05.08.2019

Как добавить свой фильтр в списке заказов в админке

Иногда нужно сделать дополнительную фильтрацию по заказам в админке в списке заказов. Как пример, это может быть разделение заказов в админке по сайтам (многосайтовость). Для сайтов на одном ядре site1.ru и site2.ru показываем в админке только свои заказы.

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

Реализация:

Для кастоной фильтрации по заказам в списке заказов в админке можно воспользоваться событием "OnSaleAdminOrderList".


<?
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 
    'sale', 
    'OnSaleAdminOrderList', 
    'OnSaleAdminOrderListHandler'
); 


function OnSaleAdminOrderListHandler(\Bitrix\Main\Event $event) 
{
    $getListParams = $event->getParameters();

    $context = \Bitrix\Main\Application::getInstance()->getContext();
    $server = $context->getServer();

    $site = \Bitrix\Main\SiteDomainTable::getList([
    	"filter" => [
	    "DOMAIN" => $server->getServerName()
    	]
    ])->fetch();
    
    $getListParams['filter']['LID'] = $site["LID"]; 

    $result = new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, $getListParams);
    return $result;
}