Наверное, все уже знают, что . После миграции у некоторых клиентов появились проблемы после перехода со свойством LOCATION заказа:
А пока нет документации, напишу что и как:
1. Теперь местоположения зависят от сайта!
Магазин -> Настройки -> Местоположения для сайтов
После миграции убедитесь, что местоположение "Россия" выбрано для вашего сайта. Если ничего не выбрано - не сможете редактировать заказ.Будет ошибка "Свойство Город не заполнено" или "Указанное местоположение не принадлежит выбранному сайту".
2. Теперь в свойстве LOCATION (тип местоположение) хранится не ID местоположения, а КОД.
Поэтому такой код у меня перестал работать для новых заказов:
Переписал по-новому:
Строчку можно было не указывать - тогда подставляется текущий язык. Но мне надо было именно по русски.
3. Новое API позволяет красиво получить полное название местоположения:
Получить местоположение можно и в старом стиле. CSaleLocation::GetByID будет работать:
4. Приведу пример, как сейчас в Битриксе реализовано отображение местоположения на странице просмотра заказа /bitrix/modules/sale/admin/order_detail.php (sale 14.11.0)
Битрикс позаботился о тех, кто еще не перешел на местоположения 2.0
UPD 24.11.2015
Учебный курс:
А пока нет документации, напишу что и как:
1. Теперь местоположения зависят от сайта!
Магазин -> Настройки -> Местоположения для сайтов
После миграции убедитесь, что местоположение "Россия" выбрано для вашего сайта. Если ничего не выбрано - не сможете редактировать заказ.Будет ошибка "Свойство Город не заполнено" или "Указанное местоположение не принадлежит выбранному сайту".
2. Теперь в свойстве LOCATION (тип местоположение) хранится не ID местоположения, а КОД.
Поэтому такой код у меня перестал работать для новых заказов:
$arVal = CSaleLocation::GetByID( $arProps["VALUE"] ); |
Переписал по-новому:
$val = "";
//$arProp["VALUE"] - "0000073738"
if ( strlen( $arProps["VALUE"] ) > 0 )
{
$parameters = array();
$parameters['filter']['=CODE'] = $arProps["VALUE"];
$parameters['filter']['NAME.LANGUAGE_ID'] = "ru";
$parameters['limit'] = 1;
$parameters['select'] = array('LNAME' => 'NAME.NAME');
$arVal = Bitrix\Sale\Location\LocationTable::getList( $parameters )->fetch();
if ( $arVal && strlen( $arVal[ 'LNAME' ] ) > 0 )
{
$val = $arVal[ 'LNAME' ];
}
}
// $val - "Москва" |
Строчку можно было не указывать - тогда подставляется текущий язык. Но мне надо было именно по русски.
$parameters['filter']['NAME.LANGUAGE_ID'] = "ru"; |
3. Новое API позволяет красиво получить полное название местоположения:
$val = Bitrix\Sale\Location\Admin\LocationHelper::getLocationPathDisplay( "0000073738" ); //$val - "Москва, Московская область, Центр, Россия" |
Получить местоположение можно и в старом стиле. CSaleLocation::GetByID будет работать:
$ID = CSaleLocation::getLocationIDbyCODE("0000073738");
$arVal = CSaleLocation::GetByID( $ID, "ru"); // параметр ru необязательный. По умолчанию текущий язык.
echo "<pre>".print_r( $arVal, true )."</pre>";
/*
Результат
Array
(
[ID] => 218
[SORT] => 100
[COUNTRY_NAME] => Россия
[COUNTRY_SHORT_NAME] =>
[COUNTRY_ID] => 1
[COUNTRY_NAME_ORIG] => Россия
[COUNTRY_NAME_LANG] => Россия
[REGION_NAME] => Московская область
[REGION_SHORT_NAME] =>
[REGION_ID] => 3
[REGION_NAME_ORIG] => Московская область
[REGION_NAME_LANG] => Московская область
[CITY_NAME] => Москва
[CITY_SHORT_NAME] =>
[CITY_ID] => 218
[CITY_NAME_ORIG] => Москва
[CITY_NAME_LANG] => Москва
)
*/
|
4. Приведу пример, как сейчас в Битриксе реализовано отображение местоположения на странице просмотра заказа /bitrix/modules/sale/admin/order_detail.php (sale 14.11.0)
Битрикс позаботился о тех, кто еще не перешел на местоположения 2.0
elseif ($arOrderProps["TYPE"] == "LOCATION")
{
$arOrder["LOCATION_TO"] = $arOrderProps["VALUE"];
if(CSaleLocation::isLocationProEnabled())
{
print(Location\Admin\LocationHelper::getLocationPathDisplay($arOrderProps['VALUE']));
}
else
{
if(CSaleLocation::isLocationProMigrated())
$arOrderProps["VALUE"] = CSaleLocation::getLocationIDbyCODE($arOrderProps["VALUE"]);
$arVal = CSaleLocation::GetByID($arOrderProps["VALUE"], LANG);
$locationString = $arVal["COUNTRY_NAME"];
if (strlen($arVal["REGION_NAME"]) > 0 && strlen($locationString) > 0)
$locationString .= " - ".$arVal["REGION_NAME"];
elseif (strlen($locationString) <= 0 && strlen($arVal["REGION_NAME"]) > 0)
$locationString = $arVal["REGION_NAME"];
if (strlen($locationString) > 0 && strlen($arVal["CITY_NAME"]) > 0)
$locationString .= " - ".$arVal["CITY_NAME"];
elseif (strlen($locationString) <= 0 && strlen($arVal["CITY_NAME"]) > 0)
$locationString = $arVal["CITY_NAME"];
echo htmlspecialcharsEx($locationString);
}
$locationData = $arOrderProps["VALUE"];
$rsZipList = CSaleLocation::GetLocationZIP($locationData);
if ($arZip = $rsZipList->Fetch())
{
if (strlen($arZip["ZIP"]) > 0)
$locationZip = $arZip["ZIP"];
}
} |
UPD 24.11.2015
Учебный курс: