Изменение гео-координат на карте при изменении адреса организации в админке
Имеем сайт-каталог организаций. В каком-то разделе находится страница организации, у которой есть адрес. На странице организации есть закладка «на карте», на которой с помощью API Геокодера Яндекса вычисляется координата расположения организации по адресу и выводится с центром в этой точке.
Сайт написали так, что эта координата вычисляется только один раз при первом обращении на страницу организации на сайте, после создания новой организации в админке.
Если в админке изменить адрес уже созданной организации, то на карте ничего не изменится, будет использовано первое вычисленное значение координат. Это значение записывается в поле 'made_in' организации в базе данных. Очистки кэша не помогают.
Мне нужно, чтобы это значение координаты менялось с изменением адреса в админке. Т.е., видимо, оно должно вычисляться в бэкэнде, а его значение уже подставляться при обращении на страницу и отрисовке карты.
Подскажите, как лучше реализовать эту возможность? Через PHP-админ очищать периодически поле не хочется, хотя и помогает.
Код скрипта getCoordinates.php:
Код обращения к скрипту в чанке:
Сайт написали так, что эта координата вычисляется только один раз при первом обращении на страницу организации на сайте, после создания новой организации в админке.
Если в админке изменить адрес уже созданной организации, то на карте ничего не изменится, будет использовано первое вычисленное значение координат. Это значение записывается в поле 'made_in' организации в базе данных. Очистки кэша не помогают.
Мне нужно, чтобы это значение координаты менялось с изменением адреса в админке. Т.е., видимо, оно должно вычисляться в бэкэнде, а его значение уже подставляться при обращении на страницу и отрисовке карты.
Подскажите, как лучше реализовать эту возможность? Через PHP-админ очищать периодически поле не хочется, хотя и помогает.
Код скрипта getCoordinates.php:
<?php
if(empty($address))
return '';
$url = "https://geocode-maps.yandex.ru/1.x/?apikey=ec899f36-8575-42dd-8346-72505d63f17b&format=json&geocode=" . urlencode($address);
$result = file_get_contents($url);
$result = json_decode($result,true);
$coord = $result['response']['GeoObjectCollection']['featureMember'][0]['GeoObject']['Point']['pos'];
$coord = array_reverse(explode(' ', $coord));
$coord = implode(', ', $coord);
$obj = $modx->getObject('msProduct', $id);
$obj->set('made_in', $coord);
$obj->save();
Код обращения к скрипту в чанке:
{set $address = $zip ~ ', ' ~ $region ~ ', ' ~ $city ~ ', ' ~ $street ~ ', ' ~ $house}
{if empty($coords)}
{set $coords = $_modx->runSnippet("@FILE snippets/objects/getCoordinates.php", ['id' => $id, 'address' => $address])}
{else}
{set $o = $_modx->getPlaceholder('objects')}
{set $o[] = ['coords' => $coords, 'pagetitle' => $pagetitle, 'address' => $address, 'image' => $thumb, 'url' => $uri, 'region' => $region, 'favorite' => $favorite]}
{$_modx->setPlaceholder('objects', $o)}
{/if}
Комментарии: 2
проверяйтк на изменение данные или повесте на событие сохранение ресурса OnDocformSave
pitrooo.ru/note/modx-plaginyi-i-sobyitiya-dlya-nix-(events).html
тут посмотрите плагины и события
pitrooo.ru/note/modx-plaginyi-i-sobyitiya-dlya-nix-(events).html
тут посмотрите плагины и события
Можно использовать компоненты или же использовать API Яндекс Карты напрямую.
Бесплатные
modstore.pro/packages/maps/yandexcoordstv
modstore.pro/packages/maps/yandexmaps
Платные:
modstore.pro/packages/maps/mapex2
modstore.pro/packages/maps/yandexmaps2
Бесплатные
modstore.pro/packages/maps/yandexcoordstv
modstore.pro/packages/maps/yandexmaps
Платные:
modstore.pro/packages/maps/mapex2
modstore.pro/packages/maps/yandexmaps2
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.