Модуль «Мультирегиональность и многодоменность» подключается сам на событии OnPageStart. Проверять установлен ли модуль функцией includeModule не обязательно.

Однако в init.php модуль ещё не подключен. Если он нужен в init.php, то подключайте так:

<?
if(\Bitrix\Main\Loader::includeModule("askaron.regions"))

  //здесь можно использовать функции и классы модуля

?>


Класс \Askaron\Regions\Region::
public static function getIblockId(): ?int
public static function getIdByXmlId( string $xml_id , ?string $site_id = null ): ?int
public static function getAllItems( ?string $site_id = null ): array
public static function setCurrent( ?int $id = null, ?string $site_id = null): void
public static function getCurrentId( ?string $site_id = null ): ?int
public static function getCurrentCode( ?string $site_id = null ): ?string
public static function getCurrentXmlId( ?string $site_id = null ): ?string
public static function getCurrentName( ?string $site_id = null ): ?string
public static function getCurrentPropDomain( ?string $site_id = null ): ?string
public static function getCurrentPropDomainMobile( ?string $site_id = null ): ?string
public static function getCurrentPropDomainsOtherKeys( ?string $site_id = null ): ?array
public static function getCurrentIsDefault( ?string $site_id = null ): ?bool
public static function getCurrentPropCountry( ?string $site_id = null ): ?string



Метод для получения ID инфоблока, где хранятся регионы
public static function getIblockId(): ?int

Метод возвращает ID инфоблока со списком регионов. В случае ошибки, если инфоблок не существует (ситуация: если кто-то изменил внешний код инфоблока регионов или удалил инфоблок), то вернёт null. Используйте метод для работы с инфоблоком регионов.

Примечание: при установке модуля создается инфоблок типа 2.0 (свойства в отдельной таблице).

Пример
$REGION_IBLOCK_ID = \Askaron\Regions\Region::getIblockId(); // Вернёт 21



Метод для получения ID региона по его XML_ID
public static function getIdByXmlId( string $xml_id , ?string $site_id = null ): ?int

Метод возвращает ID региона по его XML_ID или null, если регион не найден. Параметр $site_id задавать не обязательно, по умолчанию используется SITE_ID — текущий сайт.

Пример
$REGION_ID = \Askaron\Regions\Region::getIdByXmlId("all"); // Вернёт 1063



Метод для получения списка всех регионов
public static function getAllItems( ?string $site_id = null ): array

Метод возвращает массив всех регионов. Параметр $site_id задавать не обязательно, по умолчанию используется SITE_ID — текущий сайт.

Будут выбираться все регионы, если опция «Включить выбор регионов с учетом свойства Код сайта» выключена.

Фильтр по $site_id происходит только если включена опция «Включить выбор регионов с учетом свойства Код сайта». Перед включением опции, надо заполнить свойство "Код сайта"  у регионов. 
Пример
$arRegions = \Askaron\Regions\Region::getAllItems();
Вернёт

Array
(
    [1063] => Array
        (
            [ID] => 1063
            [NAME] => Весь мир
            [CODE] => all
            [XML_ID] => all
            [IS_DEFAULT] => (boolean) true
            [COUNTRY] => (empty string)
            [DOMAIN] => www.askaron.ru
            [DOMAIN_MOBILE] => m.askaron.ru
            [DOMAINS_OTHER_KEYS] => Array
            (
                 [askaron.ru] => (boolean) true
                 [amp.askaron.ru] => (boolean) true
            )
        )

    [1065] => Array
        (
            [ID] => 1065
            [NAME] => Астана
            [CODE] => astana
            [XML_ID] => astana
            [IS_DEFAULT] => (boolean) false
            [COUNTRY] => kz
            [DOMAIN] => astana.askaron.ru
            [DOMAIN_MOBILE] => m-astana.askaron.ru
[DOMAINS_OTHER_KEYS] => Array ( ) ) [1064] => Array ( [ID] => 1064 [NAME] => Минск [CODE] => minsk [XML_ID] => minsk [IS_DEFAULT] => (boolean) false [COUNTRY] => by [DOMAIN] => minsk.askaron.ru [DOMAIN_MOBILE] => m-minsk.askaron.ru [DOMAINS_OTHER_KEYS] => Array ( ) ) [1067] => Array ( [ID] => 1067 [NAME] => Москва и Подмосковье [CODE] => msk [XML_ID] => msk [IS_DEFAULT] => (boolean) false [COUNTRY] => ru [DOMAIN] => msk.askaron.ru [DOMAIN_MOBILE] => m-msk.askaron.ru [DOMAINS_OTHER_KEYS] => Array ( ) ) )
Важно: в названии обрезаются пробелы и символы подчеркивания. "__Весь мир" => "Весь мир". Это нужно, чтобы важнейшие регионы выводились в административном разделе в начале.
[NAME] => Весь мир
В случае, если многодоменность включена, то домен заполняется
[DOMAIN] => www.askaron.ru
[DOMAIN_MOBILE] => m.askaron.ru
В случае, если многодоменность выключена, то домен не заполняется

[DOMAIN] => "" 
[DOMAIN_MOBILE] => ""


Метод для установки текущего региона

public static function setCurrent( ?int $id = null, ?string $site_id = null): void

Метод используется для переключения текущего региона без многодоменности. С включенной многодоменностью метод вызывать для переключения не нужно, потому что Регион вычисляется  по домену. Достаточно сделать ссылку на другой домен.

Параметр $id — ID нового домена. Если $id не задан, то метод будет искать текущий домен по своему алгоритму. Метод без параметра $id не надо вызывать в шаблоне сайта, он вызывается внутри \Askaron\Regions\Region::getCurrentId и других подобных фунциях.

Параметр $site_id задавать не обязательно, по умолчанию используется SITE_ID — текущий сайт.

Метод ничего не возвращает, а записывает к себе в статическую переменную данные о регионе.

Пример
\Askaron\Regions\Region::setCurrent(1001);
$REGION_ID = \Askaron\Regions\Region::getCurrentId();
// вернёт 1001, если такой регион существует
// далее можете сделать редирект или продолжить выполнение страницы с новым регионом


Статические методы для работы с текущим регионом, который вычислил модуль.
public static function getCurrentId( ?string $site_id = null ): ?int
public static function getCurrentCode( ?string $site_id = null ): ?string
public static function getCurrentXmlId( ?string $site_id = null ): ?string
public static function getCurrentName( ?string $site_id = null ): ?string
public static function getCurrentPropDomain( ?string $site_id = null ): ?string
public static function getCurrentPropDomainMobile( ?string $site_id = null ): ?string
public static function getCurrentPropDomainsOtherKeys( ?string $site_id = null ): ?array
public static function getCurrentIsDefault( ?string $site_id = null ): ?bool
public static function getCurrentPropCountry( ?string $site_id = null ): ?string

Возвращают null только в случае, если никакой регион для сайта не найден. Это почти невозможная ситуация, но может быть, если деактивировать все регионы. Или  регион ищем по сайту, где нет регионов, с опцией «Включить выбор регионов с учетом свойства Код сайта».

Параметр $site_id для фильтрации регионов по сайту в Битриксе срабатывает только, если в настройках модуля включена опция «Включить выбор регионов с учетом свойства Код сайта». Параметр $site_id задавать не обязательно, по умолчанию используется SITE_ID — текущий сайт (в публичном разделе). $site_id имеет смысл задавать в административном разделе.

Примеры

ID текущего элемента инфоблока Регионы
$REGION_ID = \Askaron\Regions\Region::getCurrentId();

Код текущего элемента инфоблока Регионы
$REGION_CODE = \Askaron\Regions\Region::getCurrentCode();

XML_ID текущего элемента инфоблока Регионы
$REGION_XML_ID = \Askaron\Regions\Region::getCurrentXmlId();

Название текущего элемента инфоблока Регионы. В названии удаляются символы подчёркивания и пробелы в начале и в конце. 
__Весь мир будет выводиться, как Весь мир. Это сделано, чтобы в админке такой регион был раньше для контент-менеджера при сортировке по алфавиту.
$REGION_NAME = \Askaron\Regions\Region::getCurrentName();

Свойство Домен текущего элемента инфоблока Регионы. Метод работает в случае, если включена Многодоменность (для основного домена) в настройках модуля
$REGION_PROP_DOMAIN = \Askaron\Regions\Region::getCurrentPropDomain();

Свойство Мобильный домен элемента инфоблока Регионы. Метод работает в случае, если включена Многодоменность для мобильного домена в настройках модуля
$REGION_PROP_DOMAIN_MOBILE = \Askaron\Regions\Region::getCurrentPropDomainMobile();

Свойство Другие домены для определения региона. Обычно не надо задавать это свойство.
Метод работает, если по домену или мобильному домену регион не определён.
Метод нужен в случае если есть два разнозначных домена с www и без www. Либо нужно создать служебный поддомен вроде amp.сайт.ру и amp-msk.сайт.ру
Возвращает  массив ключей из дополнительных доменов для определения региона, если заданы.
$REGION_DOMAINS_OTHER_KEYS = \Askaron\Regions\Region::getCurrentPropDomainsOtherKeys(); // array( "сайт.ru" => true, "amp.сайт.ru" => true ) 

Свойство Регион по-умолчанию. Метод вернёт true, если установлено в текущем регионе, иначе false
$REGION_IS_DEFAULT = \Askaron\Regions\Region::getCurrentIsDefault();

Свойство Страна для текущего элемента инфоблока Регионы. Вернет XML_ID связанного элемента хайлоадблока. В качестве примера ru, by, kz, ua. Но можно придумать свои «Страны». Например Европа, Азия, Африка. Это свойство сделано для удобной группировки регионов. Свойство может быть вообще не заполнено. Например для __Весь мир
$REGION_COUNTRY = \Askaron\Regions\Region::getCurrentPropCountry();







0  


 Описание модуля | Описание курса | Настройки++