Обновить Яндекс.Карту после обновления json файла
Я сгенерировал точки и передаю их в json
$return_array = array();
$list_gas = array();
foreach(array_reverse($search_query->posts) as $post){
$fields = CFS()->get(false, $post->ID);
$geometry = array(
'type' => "Point",
'coordinates' => array($fields["lat"], $fields["lng"]),
);
$properties = array(
'balloonContentHeader' => 'Заголовок',
'balloonContentBody' => 'Текст',
'balloonContentFooter' => 'Подвал',
'clusterCaption' => $post->post_title,
'hintContent' => $post->post_title,
);
$p_ob = array(
'type' => "Feature",
'id' => $post->ID,
'geometry' => $geometry,
'properties' => $properties,
);
array_push($return_array, $p_ob);
$arr_gas = array(
'img' => $fields["image"],
'title' => $post->post_title,
);
array_push($list_gas, $arr_gas);
};
$j_arr = array(
'type' => 'FeatureCollection',
'features' => $return_array,
);
file_put_contents($_SERVER['DOCUMENT_ROOT'].'/place-objects.json', json_encode($j_arr, JSON_UNESCAPED_UNICODE));
После этого я создаю карту в js
ymaps.ready(init);
function init(){
var myMap = new ymaps.Map('ya_map', {center: [54.480962, 23.071734], zoom: 10}, {searchControlProvider: 'yandex#search'}),
objectManager = new ymaps.ObjectManager({clusterize: true, gridSize: 32, clusterDisableClickZoom: true});
objectManager.objects.options.set('preset', 'islands#greenDotIcon');
objectManager.clusters.options.set('preset', 'islands#greenClusterIcons');
myMap.geoObjects.add(objectManager);
$.ajax({
url: "/place-objects.json"
}).done(function(data) {
objectManager.add(data);
});
};
AJAX-запрос
let form = new FormData();
form.append("action", "send_email_request");
$.ajax({
method: "POST",
url: "/admin-ajax.php",
dataType: 'json',
cache: false,
data: {
action: "send_email_request", choices
},
success: function(data) {
console.log(data)
},
error: function(data) {
console.log(data)
}
});
В functions.php
add_action('wp_enqueue_scripts', function(){
wp_localize_script('elementor-common-js', 'wp_variables', array(
'ajax' => admin_url('admin-ajax.php'),
));
});
function send_email_request(){
// такая же генерация как выше
wp_die();
}
add_action('wp_ajax_send_email_request', 'send_email_request');
add_action('wp_ajax_nopriv_send_email_request', 'send_email_request');
Карта создаётся, все точки появляются. Далее, я с помощью AJAX запроса отправляю данные в functions.php и перезаписываю данные в файле JSON (как мне объяснили, в WP AJAX-запросы должны отправляться и обрабатываться через functions.php). Файл меняется, но карта не обновляться. Подскажите, пожалуйста, как дальше обновить карту без перезагрузки страницы? Возможно ли запустить скрипт построения карты в functions.php?
Я выяснил, что можно удалять метки с карты и загружать JSON заново и вызывать всё это после success в AJAX-запросе на изменение JSON-файла, но я опять же не понимаю как это сделать. Для полного удаления геообъектов из кластеризатора используется clusterer.removeAll(), но я не понимаю как его применить.
Ответы (1 шт):
Если ещё актуально: у вас очевидная ошибка в использовании clusterer.removeAll() вместо objectManager.removeAll()
Как применять метод, написано в документации по ссылке. Затем можно заново загрузить объекты из вашего JSON в менеджер с помощью objectManager.add()
Код можно запустить прямо из functions, но лучше создать обработчик.