Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Не получается поставить метку на карту
Форумы портала PHP.SU » » Вопросы новичков » Не получается поставить метку на карту

Страниц (1): [1]
 

1. algebra - 04 Августа, 2019 - 22:48:57 - перейти к сообщению
Задача:
дать возможность пользователю поставить собственную метку с кратким описанием.

Проблема:
Карта google загружается, метки из базы данных берутся, а функция initialize() почему-то работать не хочет.

Подскажите как подправить этот код?
map.blade.php
Спойлер (Отобразить)


MapController.php
Спойлер (Отобразить)
2. Vladimir Kheifets - 05 Августа, 2019 - 08:51:18 - перейти к сообщению
algebra пишет:
Задача:
дать возможность пользователю поставить собственную метку с кратким описанием.

Проблема:
Карта google загружается, метки из базы данных берутся, а функция initialize() почему-то работать не хочет.

Подскажите как подправить этот код?
map.blade.php
Спойлер (Отобразить)


MapController.php
Спойлер (Отобразить)


Добрый день!
1. В map.blade.php Вы показали JS function initialize()
В ней не определена переменная [b]latlng[/b]
Вам нужно посмотреть в консоле браузера ошибки JS
2. В MapController.php PHP-class GMaps()
PHP:
скопировать код в буфер обмена
  1. $gmap = new GMaps();
  2. $gmap->initialize($config);
Не очень понятно как метод initialize PHP-класса GMaps()
связан с JS function initialize() из map.blade.php
Удачи!
3. andrewkard - 05 Августа, 2019 - 11:03:03 - перейти к сообщению
Добрый день.
Нужно дебажить, смотрите в консоли что пишет, есть ошибки?
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <body onload="initialize()" onunload="GUnload()">
  3.  

точно не срабатывает?
Попробуйте просто
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. initialize();
  3.  
4. LIME - 05 Августа, 2019 - 14:38:02 - перейти к сообщению
andrewkard пишет:
Попробуйте просто
сработает до подгрузки скриптов и создания элементов
дебажить надо
algebra https://learn[dot]javascript[dot]ru/devtools
5. andrewkard - 05 Августа, 2019 - 21:38:38 - перейти к сообщению
LIME пишет:
сработает до подгрузки скриптов и создания элементов

решал так
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. var initialize = function(){
  3.             return initMap(parseFloat($("#show-map").attr("data-lat")), parseFloat($("#show-map").attr("data-lng")), $("#show-map").attr("data-title"), true);
  4.         };
  5.  


CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $('#show-map').click(function(e){
  3.         e.preventDefault();
  4.         var el = $(this);
  5.         var active = $(el).attr('data-active');
  6.         var key = $(el).attr('data-key');
  7.  
  8.         if(active == 1){
  9.             $(el).text($(el).attr('data-text-show'));
  10.             $(el).attr('data-active',0);
  11.         } else {
  12.             $(el).attr('data-active',1);
  13.             $(el).text($(el).attr('data-text-hide'));
  14.         }
  15.  
  16.         $( "#map" ).slideToggle( "slow", function() {
  17.             if(active == 0){
  18.                 getMapScript(key);
  19.             }
  20.         });
  21.     });
  22.  


CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. function getMapScript(key){
  3.     if(!window.google){
  4.         var script = document.createElement('script');
  5.         script.type = 'text/javascript';
  6.         script.src = '//maps.googleapis.com/maps/api/js?key='+key+'&language=uk&region=UA&callback=initialize';
  7.         document.getElementsByTagName('head')[0].appendChild(script);
  8.     } else {
  9.         initialize();
  10.     }
  11. }
  12.  


CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. function initMap(lat, lng, title, drag) {
  3.     var myLatLng = {lat: lat, lng: lng};
  4.  
  5.     var map = new google.maps.Map(document.getElementById('map'), {
  6.         zoom: 15,
  7.         center: myLatLng
  8.     });
  9.  
  10.     var marker = new google.maps.Marker({
  11.         position: myLatLng,
  12.         map: map,
  13.         title: title,
  14.         draggable:drag
  15.     });
  16.  
  17.     google.maps.event.addListener(marker, 'dragend', function(marker){
  18.         var latLng = marker.latLng;
  19.         currentLatitude = latLng.lat();
  20.         currentLongitude = latLng.lng();
  21.         $('#post-latitude').val(currentLatitude);
  22.         $('#post-longitude').val(currentLongitude);
  23.     });
  24. }
  25.  
6. LIME - 05 Августа, 2019 - 21:43:55 - перейти к сообщению
andrewkard а зачем так муторно? Почему к событию загрузки не привязаться?
Еще есть хак с setTimeout в 0 чтобы выполниться после всего основного потока
(Добавление)
Подключили же jQuery
document.ready
7. algebra - 05 Августа, 2019 - 23:11:46 - перейти к сообщению
Хорошо, спрошу по-другому (потому как запуталась в этих мапах):
1. Есть контролер с метками из БД (в шапке темы)
его менять не будем
2. А в блэйд такого вида (спойдер) надо добавить функцию добавления меток
Напишите пожалуйста
Спойлер (Отобразить)

 

Powered by ExBB FM 1.0 RC1