Дата последнего изменения: 15.06.2021
Не забудьте подключить модуль sale.
Добавление типа местоположения:
$res = \Bitrix\Sale\Location\TypeTable::add(array( 'CODE' => 'CITY', 'SORT' => '100', // уровень вложенности 'DISPLAY_SORT' => '200', // приоритет показа при поиске 'NAME' => array( // языковые названия 'ru' => array( 'NAME' => 'Город' ), 'en' => array( 'NAME' => 'City' ), ) )); if($res->isSuccess()) { print('Type added with ID = '.$res->getId()); }
Обновление типа местоположения
$res = \Bitrix\Sale\Location\TypeTable::update(21, array( 'SORT' => '300', 'NAME' => array( 'ru' => array( 'NAME' => 'Новый Город' ), ) )); if($res->isSuccess()) { print('Updated!'); }
Удаление типа местоположения
$res = \Bitrix\Sale\Location\TypeTable::delete(21); if($res->isSuccess()) { print('Deleted!'); }
Получение типа местоположения по ID
$item = \Bitrix\Sale\Location\TypeTable::getById(14)->fetch(); print_r($item);
Получение списка типов с названиями на текущем языке
$res = \Bitrix\Sale\Location\TypeTable::getList(array( 'select' => array('*', 'NAME_RU' => 'NAME.NAME'), 'filter' => array('=NAME.LANGUAGE_ID' => LANGUAGE_ID) )); while($item = $res->fetch()) { print_r($item); }
Получаем группы с учётом иерархии, в которых есть данное местоположение
<? \Bitrix\Main\Loader::includeModule('sale'); function getGroupsByLocation($locationId) { $res = \Bitrix\Sale\Location\LocationTable::getList([ 'filter' => ['=ID' => $locationId], 'select' => [ 'ID', 'LEFT_MARGIN', 'RIGHT_MARGIN' ] ]); if(!$loc = $res->fetch()) { return []; } $locations = [$locationId]; $res = \Bitrix\Sale\Location\LocationTable::getList([ 'filter' => [ '<LEFT_MARGIN' => $loc['LEFT_MARGIN'], '>RIGHT_MARGIN' => $loc['RIGHT_MARGIN'], 'NAME.LANGUAGE_ID' => LANGUAGE_ID, ], 'select' => [ 'ID', 'LOCATION_NAME' => 'NAME.NAME' ] ]); while($locParent = $res->fetch()) { $locations[] = $locParent['ID']; } $res = \Bitrix\Sale\Location\GroupLocationTable::getList([ 'filter' => ['=LOCATION_ID' => $locations] ]); $groups = []; while($groupLocation = $res->fetch()) { $groups[] = $groupLocation['LOCATION_GROUP_ID']; } return $groups; }
Добавление
$res = \Bitrix\Sale\Location\LocationTable::add(array( 'CODE' => 'newly-created-location-code', 'SORT' => '100', // приоритет показа при поиске 'PARENT_ID' => 1, // ID родительского местоположения 'TYPE_ID' => 14, // ID типа 'NAME' => array( // языковые названия 'ru' => array( 'NAME' => 'Архангельск' ), 'en' => array( 'NAME' => 'Arkhangelsk' ), ), 'EXTERNAL' => array( // значения внешних сервисов array( 'SERVICE_ID' => 1, // ID сервиса 'XML_ID' => '163000' // значение ), array( 'SERVICE_ID' => 1, 'XML_ID' => '163061' ), ) )); if($res->isSuccess()) { print('Location added with ID = '.$res->getId()); } else { print_r($res->getErrorMessages()); }
Обновление
$res = \Bitrix\Sale\Location\LocationTable::update(3156, array( 'PARENT_ID' => 33, 'NAME' => array( 'de' => array( 'NAME' => 'Arkhangelsk' ), ) )); if($res->isSuccess()) { print('Updated!'); }
Удаление
$res = \Bitrix\Sale\Location\LocationTable::delete(3156); if($res->isSuccess()) { print('Deleted!'); }
Получение местоположения по ID
$item = \Bitrix\Sale\Location\LocationTable::getById(3159)->fetch(); print_r($item);
Получение местоположения по CODE
, с опциональной фильтрацией\выборкой полей. Фактически это обертка над \Bitrix\Sale\Location\LocationTable::getList().
$item = \Bitrix\Sale\Location\LocationTable::getByCode('newly-created-location-code', array( 'filter' => array('=NAME.LANGUAGE_ID' => LANGUAGE_ID), 'select' => array('*', 'NAME_RU' => 'NAME.NAME') ))->fetch(); print_r($item);
Получение списка местоположений с названиями на текущем языке и кодами типов
$res = \Bitrix\Sale\Location\LocationTable::getList(array( 'filter' => array('=NAME.LANGUAGE_ID' => LANGUAGE_ID), 'select' => array('*', 'NAME_RU' => 'NAME.NAME', 'TYPE_CODE' => 'TYPE.CODE') )); while($item = $res->fetch()) { print_r($item); }
Получение прямых потомков узла с ID=1 с названиями на текущем языке, кодами и названиями типов местоположений
$res = \Bitrix\Sale\Location\LocationTable::getList(array( 'filter' => array( '=ID' => 1, '=CHILDREN.NAME.LANGUAGE_ID' => LANGUAGE_ID, '=CHILDREN.TYPE.NAME.LANGUAGE_ID' => LANGUAGE_ID, ), 'select' => array( 'CHILDREN.*', 'NAME_RU' => 'CHILDREN.NAME.NAME', 'TYPE_CODE' => 'CHILDREN.TYPE.CODE', 'TYPE_NAME_RU' => 'CHILDREN.TYPE.NAME.NAME' ) )); while($item = $res->fetch()) { print_r($item); }
Получение родительских узлов для трех узлов
$res = \Bitrix\Sale\Location\LocationTable::getList(array( 'filter' => array( '=ID' => array(3159, 85, 17), '=PARENT.NAME.LANGUAGE_ID' => LANGUAGE_ID, '=PARENT.TYPE.NAME.LANGUAGE_ID' => LANGUAGE_ID, ), 'select' => array( 'PARENT.*', 'NAME_RU' => 'PARENT.NAME.NAME', 'TYPE_CODE' => 'PARENT.TYPE.CODE', 'TYPE_NAME_RU' => 'PARENT.TYPE.NAME.NAME' ) )); while($item = $res->fetch()) { print_r($item); }
Получение пути от корня дерева до текущего элемента
$res = \Bitrix\Sale\Location\LocationTable::getList(array( 'filter' => array( '=ID' => 224, '=PARENTS.NAME.LANGUAGE_ID' => LANGUAGE_ID, '=PARENTS.TYPE.NAME.LANGUAGE_ID' => LANGUAGE_ID, ), 'select' => array( 'I_ID' => 'PARENTS.ID', 'I_NAME_RU' => 'PARENTS.NAME.NAME', 'I_TYPE_CODE' => 'PARENTS.TYPE.CODE', 'I_TYPE_NAME_RU' => 'PARENTS.TYPE.NAME.NAME' ), 'order' => array( 'PARENTS.DEPTH_LEVEL' => 'asc' ) )); while($item = $res->fetch()) { print_r($item); }
Получение списка корневых узлов с указанием количества потомков
$res = \Bitrix\Sale\Location\LocationTable::getList(array( 'filter' => array( '=PARENT_ID' => 0, '=NAME.LANGUAGE_ID' => LANGUAGE_ID, '=TYPE.NAME.LANGUAGE_ID' => LANGUAGE_ID, ), 'select' => array( 'ID', 'NAME_RU' => 'NAME.NAME', 'TYPE_CODE' => 'TYPE.CODE', 'TYPE_NAME_RU' => 'TYPE.NAME.NAME', 'CHILD_CNT' ) )); while($item = $res->fetch()) { print_r($item); }
Получение внешних данных для местоположений с указанием кода сервиса
$res = \Bitrix\Sale\Location\LocationTable::getList(array( 'filter' => array( 'CODE' => array('newly-created-location-code', '0000028090'), ), 'select' => array( 'EXTERNAL.*', 'EXTERNAL.SERVICE.CODE' ) )); while($item = $res->fetch()) { print_r($item); }
Получение поддерева узла с названиями на текущем языке
$res = \Bitrix\Sale\Location\LocationTable::getList(array( 'runtime' => array( 'SUB' => array( 'data_type' => '\Bitrix\Sale\Location\Location', 'reference' => array( '>=ref.LEFT_MARGIN' => 'this.LEFT_MARGIN', '<=ref.RIGHT_MARGIN' => 'this.RIGHT_MARGIN' ), 'join_type' => "inner" ) ), 'filter' => array( '=CODE' => '0000028042', '=SUB.NAME.LANGUAGE_ID' => LANGUAGE_ID ), 'select' => array( 'S_CODE' => 'SUB.CODE', 'S_NAME_RU' => 'SUB.NAME.NAME', 'S_TYPE_CODE' => 'SUB.TYPE.CODE' ) )); while($item = $res->fetch()) { print_r($item); }
Получаем местоположения входящие в группу без учёта иерархии.
\Bitrix\Main\Loader::includeModule('sale'); /* Идентификатор группы */ $groupId = 1 /* Получаем местоположения входящие в группу */ $res = \Bitrix\Sale\Location\GroupLocationTable::getConnectedLocations(1); while($item = $res->fetch()) { var_dump($item); }