Тут я добавляю свое ограничение для сайта на шаблоне АСПРО, чтобы привязать доставки к выбранному региону, который хранится в сессии
CustomDelivery.php
<? use Bitrix\Sale\Delivery\Restrictions; use Bitrix\Sale\Internals\Entity; //создаем наследуемый класс class CustomDeliveryClass extends Restrictions\Base { public static function getClassTitle() { return 'по региону (ASPRO)'; } public static function getClassDescription() { return 'доставка будет выводится только для указанного города'; } //Метод check возвращает истину если выполняются необходимые условия на доставку, restrictionParams передает заданные параметры ограничения public static function check($shipmentParams, array $restrictionParams, $deliveryId = 0) { if ($GLOBALS['arRegion']['ID'] === $restrictionParams['REGION_ID']) return true; return false; } //extractParams должен возвращать параметры отгрузки и передает их в метод check protected static function extractParams(Entity $shipment) { return null; } //Задаем параметры условия доставки, эти значения можно будет ввести в интерфейсе управления public static function getParamsStructure($entityId = 0) { return array( "REGION_ID" => array( 'TYPE' => 'NUMBER', 'DEFAULT' => "1", 'LABEL' => 'ID региона' ) ); } } ?>
init.php
<? AddEventHandler("sale", "onSaleDeliveryRestrictionsClassNamesBuildList", "onCheckRuleDelivery"); function onCheckRuleDelivery(){ return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::SUCCESS, array( 'CustomDeliveryClass' => '/bitrix/php_interface/include/CustomDelivery.php' ) ); } ?>
Ссылка на официальную доку: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=7352
Была проверка по сессии, но в шаблоне ASPRO используют глобальные переменные, перевел код на $GLOBALS['arRegion']['ID']
Другие варианты:
$GLOBALS["arRegionLink"]["PROPERTY_LINK_REGION"]
$_SESSION["ASPRO_FILTER"]["arRegionLink"]["PROPERTY_LINK_REGION"]
Если кому требуется, есть решение для выбора региона работающее с инфоблоком. Просто выбираем нужные регионы из списка)