Свой шаблон генерации номера заказа
Стандартные варианты не очень хороши, так как присутствуют символы отличные от цифр (0-9), а без шаблона каждый будет знать кол-во заказов в магазине. Я решил немного персонализировать номер заказа, используя только цифры.
Как сделать?
Для начала добавляем новый вариант шаблона в выпадающий список в настройках модуля (событие OnBuildAccountNumberTemplateList)
EventManager::getInstance()->addEventHandler('sale', 'OnBuildAccountNumberTemplateList', "addAccountNumberTemplate"); function addAccountNumberTemplate () { return array( 'CODE' => 'cnt-orders-on-user', 'NAME' => 'Год № ID (7000312)' ); }
Далее добавляем скрипт для формирования нового номера шаблона (событие OnBeforeOrderAccountNumberSet)
EventManager::getInstance()->addEventHandler('sale', 'OnBeforeOrderAccountNumberSet', "genOrderNumber"); function genOrderNumber($orderId, $type){ \Bitrix\Main\Loader::includeModule('sale'); if ($type == 'cnt-orders-on-user' && $orderId > 0) { $order = \Bitrix\Sale\Order::load($orderId); $userId = $order->getUserId(); $dbOrders = \Bitrix\Sale\Order::getList(array( 'filter' => array('USER_ID' => $userId), 'group' => array('COUNT' => 'USER_ID'), 'select' => array('CNT'), 'runtime' => array( new \Bitrix\Main\Entity\ExpressionField('CNT', 'COUNT(*)') ) )); if ($arOrders = $dbOrders->fetch()) { $cnt = sprintf("%04d", $arOrders['CNT']); } else { $cnt = '0001'; } return date('y'){1}.$cnt.$userId; } return false; }
И в конце, в настройках модуля необходимо выбрать новый шаблон и проверить работу скрипта. Готово.
Получится примерно так: "Вы оформили заказ №700061" (2017 год, 6 по счету заказ у пользователя с ID = 1)
Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.