Your IP : 18.117.98.198
<?
use Bitrix\Main\Loader;
use Bitrix\Main\Web\HttpClient;
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");
define("NO_KEEP_STATISTIC", true);
$APPLICATION->SetTitle("Обновление координат для магазинов");
global $USER;
if($USER->IsAdmin()){
Loader::includeModule('iblock');
?>
<div class="content-center">
<div class="form-standart" style="padding-bottom: 20px;">
<form action="" method="post">
<div style="padding: 20px;border: 1px solid #ccc;">
<label>Выберите инфоблок для обновления</label>
<?= GetIBlockDropDownList(false, 'IBLOCK_TYPE_ID',
'IBLOCK_ID',
false, 'class="select2"', 'class="select2"'); ?>
</div>
<div style="padding: 20px;border: 1px solid #ccc;">
Тип обновления:<br><br>
<!-- <label>-->
<!-- <input type="radio" name="mod" value="all">Обновить все координаты-->
<!-- </label>-->
<!-- <br>-->
<!-- <br>-->
<label>
<input type="radio" name="mod" value="empty" checked>Только не заполненные
</label>
<br>
<br>
<div>Обновление может занять продолжительное время, для режима Только незаполненные - установлен
режим обновлять по 50 записей, После окончания работы скрипта - запустите его еще раз
</div>
<input type="submit" value="Начать">
</div>
</form>
</div>
<?
if($_POST['IBLOCK_ID'] && intval($_POST['IBLOCK_ID']) > 0){
$iblockId = intval($_POST['IBLOCK_ID']);
$arFilter = [];
$navParams = false;
$arFilter['IBLOCK_ID'] = $iblockId;
$arFilter['PROPERTY_MAP'] = ($_POST['mod'] == 'all') ? true : false; //только пустые
if(!$arFilter['PROPERTY_MAP']){
$navParams['nTopCount'] = 50;
}
$Elements = CIBlockElement::GetList([], $arFilter, false, $navParams, [
'ID',
'NAME',
'PROPERTY_MAP',
'PROPERTY_ADDRESS',
'PROPERTY_CITY',
]);
while($item = $Elements->GetNext()){
$address = $item['PROPERTY_CITY_VALUE'] . ', ' . $item['PROPERTY_ADDRESS_VALUE'];
if(!$item['PROPERTY_CITY_VALUE'] || !$item['PROPERTY_ADDRESS_VALUE']){
echo '<div style="color:red">ID ' . $item['ID'] . ' Город или адрес ' . $item['NAME'] . ' не заполнены</div>';
continue;
}
$httpClient = new HttpClient();
$httpClient->setHeader('Content-Type', 'application/json', true);
$httpClient->setTimeout(2);
$httpClient->waitResponse(true);
$response = $httpClient->get('https://maps.googleapis.com/maps/api/geocode/json?' . http_build_query(array('address' => $address)));
if($response){
$result = json_decode($response, true);
$firstResult = array_shift($result['results']);
$coordinatesArray = $firstResult['geometry']['location'];
if($coordinatesArray){
$coordinatesStr = $coordinatesArray['lat'] . ',' . $coordinatesArray['lng'];
CIBlockElement::SetPropertyValuesEx($item['ID'], $iblockId, array('MAP' => $coordinatesStr));
echo '<div style="color:green">ID ' . $item['ID'] . ' Обновляем координаты для ' . $item['NAME'] . '</div>';
} else{
echo '<div style="color:red">ID ' . $item['ID'] . ' Не смогли получить координаты для ' . $item['NAME'] . ', проверьте адрес и город</div>';
}
} else{
echo '<div style="color:red">ID ' . $item['ID'] . ' Не смогли получить координаты для ' . $item['NAME'] . ', проверьте адрес и город</div>';
}
}
}
?>
</div>
<?
}
else{
echo '<div style="color:red">Доступно только для администратора</div>';
}
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/footer.php"); ?>