GoogleMap и Wordpress: проблемы с динамическим созданием маркеров - PullRequest
1 голос
/ 15 сентября 2011

Я хотел бы создать маркеры динамически в GoogleMap в Wordpress.Маркеры вычисляются из тегов записей (которые являются всеми местоположениями).У меня нет проблем в вычислении координат и создании массива php.Проблема возникает, когда мне нужно отобразить динамически сгенерированные данные, хранящиеся в массиве на карте, потому что указатели не отображаются

Я указал следующие инструкции в WP header.php:

  <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=mykey" type="text/javascript"></script>

  <script src="<?php bloginfo('template_directory'); ?>/mapLocations_cache.php" type="text/javascript"></script> 
  <script src="<?php bloginfo('template_directory'); ?>/map_functions.js" type="text/javascript"></script>

Динамически созданный массив (который я сохраняю в mapLocations_cache.php) имеет следующий формат:

   var markers = [
   {
  'latitude': 62.3908358,
  'longitude': 17.3069157,
  'title': 'it happens in Sundsvall',
  'news': 'che noia5'
   },
   ];

Файл map_functions.js содержит следующий код:

   var centerLatitude = 62.3908358;
   var centerLongitude = 17.3069157;
   var startZoom = 4;

   var map;

   function addMarker(latitude, longitude, description) {
   var marker = new GMarker(new GLatLng(latitude, longitude));

    GEvent.addListener(marker, 'click',
     function() {
        marker.openInfoWindowHtml(description);
     }
   );

   map.addOverlay(marker);
   }

   function init() {
   if (GBrowserIsCompatible()) {    
    map = new GMap2(document.getElementById("map")); 
    map.addControl(new GSmallMapControl());
    map.setCenter(new GLatLng(centerLatitude, centerLongitude), startZoom);

    for(id in markers) {
        addMarker(markers[id].latitude, markers[id].longitude, markers[id].title);


    }
    }
    }

    window.onload = init;
    window.onunload = GUnload;

С тех пор, как я используюфайл / массив, который НЕ генерируется динамически, этот код работает хорошо, я подозреваю, что JavaScript, включенный в заголовок, не завершается надлежащим образом, когда я пытаюсь динамически собирать данные из постов и тегов WordPress.

Любое предложениепомогло бы: - (

Ура

Марина

Ответы [ 4 ]

0 голосов
/ 26 сентября 2011

Эврика! Я нашел решение моей ошибки. Вместо того, чтобы указывать код Javacript, который заботится о указателях и GoogleMaps в заголовке, я переместил его в конец index.php. Это означает, что данные карты будут обрабатываться только тогда, когда мой геокодер завершит свою работу и список / массив указателей будет завершен!

Взаимодействие между PhP и Javascript мне не совсем понятно: -)

Marina

0 голосов
/ 15 сентября 2011

Вот несколько предложений:

  1. Убедитесь, что после последнего элемента в массиве markers нет символа ',' (как в вашем коде).
  2. Предпочитают for (id = 0; id < markers.length; ++id) {...} перебирать массив.
  3. Убедитесь, что вы набрали правильные цифры в function addMarker(lat, lng, ..). Вы также можете принудительно привести число к числу: var marker = new GMarker(new GLatLng(lat-0, lng-0));.
  4. Отобразите и проверьте источник страницы в браузере, используя «Показать источник» или аналогичный.
  5. Загрузите полный исходный код страницы на локальный компьютер и проверьте его.
  6. Используйте отладчик Javascript (например, Firebug) для отладки вашего кода.
0 голосов
/ 16 сентября 2011

Используйте API геокодирования Google для передачи самого местоположения, а не кодируйте long и lat другим скриптом.Google API хорошо работает с названиями городов, стран и почтовых индексов и довольно пуленепробиваемый, даже если форматирование не идеальное.

0 голосов
/ 15 сентября 2011
 var markers = [
      {
          'latitude': 62.3908358,
          'longitude': 17.3069157,
          'title': 'it happens in Sundsvall',
          'news': 'che noia5'
      },
   ];

Вы пропустили заключительный апостроф. Я не уверен, что это проблема, но вы можете проверить это и убедиться, что это не так.

Кроме этого, я не совсем уверен, но вы также можете проверить эту ссылку: http://code.google.com/apis/maps/documentation/javascript/

...