Изменение гео-координат на карте при изменении адреса организации в админке

Имеем сайт-каталог организаций. В каком-то разделе находится страница организации, у которой есть адрес. На странице организации есть закладка «на карте», на которой с помощью API Геокодера Яндекса вычисляется координата расположения организации по адресу и выводится с центром в этой точке.

Сайт написали так, что эта координата вычисляется только один раз при первом обращении на страницу организации на сайте, после создания новой организации в админке.

Если в админке изменить адрес уже созданной организации, то на карте ничего не изменится, будет использовано первое вычисленное значение координат. Это значение записывается в поле '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}
Дмитрий
14 января 2020, 15:18
modx.pro
690
0

Комментарии: 2

Станислав
14 января 2020, 18:32
0
проверяйтк на изменение данные или повесте на событие сохранение ресурса OnDocformSave
pitrooo.ru/note/modx-plaginyi-i-sobyitiya-dlya-nix-(events).html
тут посмотрите плагины и события
    SEQUEL.ONE
    14 января 2020, 20:39
    0
    Можно использовать компоненты или же использовать API Яндекс Карты напрямую.

    Бесплатные
    modstore.pro/packages/maps/yandexcoordstv
    modstore.pro/packages/maps/yandexmaps

    Платные:
    modstore.pro/packages/maps/mapex2
    modstore.pro/packages/maps/yandexmaps2
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      2