Работа через реестр
Этот способ помогает не ошибиться в названии нужного метода при работе с сущностями интернет-магазина в редакции, объединяющей интернет-магазин и CRM (например, «1С-Битрикс24: Интернет-магазин+CRM»).
Примечание: если в таких редакциях использовать классы обычного интернет-магазина, то могут возникнуть проблемы с работой функционала, специфичного для CRM (например, с работой роботов).
\Bitrix\Main\Loader::includeModule( 'sale' ); $registry = \Bitrix\Sale\Registry::getInstance( \Bitrix\Sale\Registry::REGISTRY_TYPE_ORDER ); $orderClassName = $registry->getOrderClassName(); $order = $orderClassName::load(...);
Суть описанного способа:
- Загрузка модуля sale и получение объекта реестра.
При загрузке объекта выполняется инициализация карты, которая описывает, какие классы отвечают за указанную сущность интернет-магазина (CRM в эту карту загружает свои классы, поэтому карта становится актуальной для продукта, содержащего CRM).
- Теперь нужно не явно работать с названием класса, а запрашивать его из реестра с помощью метода типа getOrderClassName. Он вернет правильное название класса.
- В завершении вместо явного указания класса используется переменная
$orderClassName
, которая содержит правильное название класса, и продолжается обычная работа с нужными методами заказа, например, load($id).
Для остальных сущностей интернет-магазина методы по получению правильного класса аналогичны (например, чтобы работать с оплатой, нужно вместо getOrderClassName() вызывать getPaymentClassName() ).