Февраль 20, 2021
Теги: Магазин
Работа с местоположениями магазина при помощи класса "\Bitrix\Sale\Location\LocationTable" и др.
Выбор всех местоположений верхнего уровня (в данном примере это страны), включая название на текущем языке и дополнительно выбираем параметр PHONE_MASK, если он задан (таким образом в административной части задаем маску телефона для стран):
$result=\Bitrix\Sale\Location\LocationTable::getList(array(
'filter' => array('DEPTH_LEVEL'=>1,'NAME.LANGUAGE_ID'=>LANGUAGE_ID),
'select' => array('ID','LANG_'=>'NAME'),
));
while($loc=$result->fetch())
{
$externalDataResult=\Bitrix\Sale\Location\LocationTable::getExternalData($loc['ID'],array('select'=>array('*','CODE'=>'SERVICE.CODE')));
while($externalData=$externalDataResult->fetch())
{
if($externalData['CODE']!='PHONE_MASK')
continue;
$loc['MASK'] = $externalData['XML_ID'];
}
print_r($loc);
}
/*
Array
(
[ID] => 1
[LANG_ID] => 3158
[LANG_NAME] => Россия
[LANG_NAME_UPPER] => РОССИЯ
[LANG_SHORT_NAME] =>
[LANG_NAME_NORM] =>
[LANG_LANGUAGE_ID] => ru
[LANG_LOCATION_ID] => 1
[MASK] => +7 (999) 999-99-99
)
*/
// далее при регистрации используем разные маски телефона при помощи плагина inputmask
// (местоположения предварительно сохранены в $arResult['locations']
?>
<select onchange="$('#input_<?=$FIELD;?>').inputmask('mask', {'mask': this.value, 'showMaskOnHover':false });">
<?foreach($arResult['locations'] as $loc):?>
<option value="<?=$loc['MASK']?>"><?=$loc['LANG_NAME']?></option>
<?endforeach?>
</select>
<input size="30" type="tel" id="input_<?=$FIELD;?>" name="REGISTER[<?=$FIELD?>]" value="<?=$arResult["VALUES"][$FIELD]?>" />
<script>
$('#input_<?=$FIELD;?>').inputmask('mask', {'mask': '<?=$arResult['locations'][0]['MASK']?>', 'showMaskOnHover':false });
</script>
<?