<script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU&amp;apikey=b6a870ec-d914-424a-a003-b2d702a5d3db" type="text/javascript"></script>
<script type="text/javascript">
    {literal}
    ymaps.ready(yandexMapInit);

    function yandexMapInit() {
        var myPlacemark, myMap = new ymaps.Map('map', {
                center: [ {/literal}{if !empty($article->coordinates)}{$article->coordinates}{else}41.31218993948199, 69.27960219478548{/if}{literal}],
                zoom: {/literal}{if !empty($article->coordinates)}17{else}9{/if}{literal},
                // Отображение кнопок.
                controls: ['zoomControl', 'searchControl', 'geolocationControl', 'fullscreenControl'],
            }, {
                searchControlProvider: 'yandex#search'
            });
        {/literal}{if !empty($article->coordinates)}
        var myPlacemark = new ymaps.Placemark(myMap.getCenter(), {
            balloonContentBody: [
                '<address><strong>{if !empty($article->title)}{$article->title}{/if}</strong><br/>',
                'Адрес: {if !empty($article->address)}{$article->address}{/if}',
                '</address>'
            ].join('')
        }, {
            preset: 'islands#redDotIcon'
        });
        myMap.geoObjects.add(myPlacemark);
        {/if}{literal}
        // Слушаем клик на карте.
        myMap.events.add('click', function (e) {
            var coords = e.get('coords');
            // Если метка уже создана – просто передвигаем ее.
            if (myPlacemark) {
                myPlacemark.geometry.setCoordinates(coords);
            } else {  // Если нет – создаем.
                myPlacemark = createPlacemark(coords);
                myMap.geoObjects.add(myPlacemark);
                // Слушаем событие окончания перетаскивания на метке.
                myPlacemark.events.add('dragend', function () {
                    getAddress(myPlacemark.geometry.getCoordinates());
                });
            }
            getAddress(coords);
        });

        // Создание метки.
        function createPlacemark(coords) {
            return new ymaps.Placemark(coords, {
                iconCaption: 'поиск...'
            }, {
                preset: 'islands#redDotIconWithCaption',
                draggable: true
            });
        }

        // Определяем адрес по координатам (обратное геокодирование).
        function getAddress(coords) {
            myPlacemark.properties.set('iconCaption', 'поиск...');
            ymaps.geocode(coords).then(function (res) {
                var firstGeoObject = res.geoObjects.get(0);

                myPlacemark.properties
                    .set({
                        iconCaption: firstGeoObject.properties.get('name'),
                        balloonContent: firstGeoObject.properties.get('text') + '<p>Координаты:<br />' + [coords[0].toPrecision(12), coords[1].toPrecision(12)].join(', ') + '</p>'
                    });
                $('#coordinates').val( [coords[0].toPrecision(12)].join(', ') + ", " +[coords[1].toPrecision(12)].join(', '));
                å
            });
        }
    }
    {/literal}
</script>