Sobi2 и googlemap — изпользование карт в каталоге предприятий

Сегодня я расскажу как подружить sobi2 с google map .

Речь пойдет о sobi2 для joomla 1.5.

Для чего нужн карта в каталоге: ну к примеру для того чтобы в каталоге организаций показать местонахождение оной непосредственно на googlemap.  Так же гугл карта может пригодится для каталога недвижимости, сайта путешествий.. да мало ли применения. Перейдем же к делу.

В sobi2 есть стандартная функция google map. Но реализована она как-то убого. Т.е. карта выглядит стремно, добавлять можно только вводя координаты в соответствующие поля.. вообщем печаль..


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


Для того что бы сделать человеко понятный вариант необходимо выполнить ряд действий:

Зайти в sobi2 Параметры — настройка полей.

Сдесь вы видите 2 неопубликованных поля:  field_longitude это долгота и field_latitude это широта.

Опубликовывем их.

Переходим в Параметры отображения — Google maps

Здесь включаем функцию googlemap. Вставляем ключ карты и выставляем желаемые параметры)

Параметр Информационное окно можно отключить нафиг совсем, оно нам ненужно.

Незабываем о присвоении широте и долготе соответствующих полей.

Теперь  карта отображается в детальном виде, но при добавлении приходится вписывать вручную широту и долготу.. что не айс.. Исправляем.

Создаем новое поле и обзываем к примеру addmap, выбираем тип — текстовый код и вставляем код карты

<div style="float: left;">
<script src="http://maps.google.ru/maps?file=api&v=1&key={googleApiKey}" type="text/javascript">
</script>

<div id="map" style="width: 432px; height: 350px"></div>
<script type="text/javascript">
    //<![CDATA[

    var start_latitude = "15.437531155373254";
    var start_longitude = "73.83407598361373";
    var zoomlevel_add = 8;
    var zoomlevel_edit = 3;

    var map = new GMap(document.getElementById("map"));
    map.addControl(new GSmallMapControl());
    map.addControl(new GMenuMapTypeControl());
     map.setMapType(G_HYBRID_MAP);

   var latitude = document.getElementById('field_latitude').value;
  if (latitude == "")
    latitude = start_latitude;
  var longitude = document.getElementById('field_longitude').value;
  if (longitude == "")
    longitude = start_longitude;
  if (latitude == start_latitude)
		zoomlevel = zoomlevel_add;
  else
     {zoomlevel = zoomlevel_edit;
  point = new GLatLng(latitude,longitude);
  map.addOverlay(new GMarker(point, {draggable: true}));}

  	// center and zoom to the lat/long in the form
	map.centerAndZoom(new GPoint(longitude,latitude), zoomlevel);

   GEvent.addListener(map, 'click',
        function(overlay, point) {
            if (point) {
				map.clearOverlays();
				map.addOverlay(new GMarker(point, {draggable: true}));
                document.getElementById('field_latitude').value = point.y;
                document.getElementById('field_longitude').value = point.x;
            }
        }
    );
//]]>
</script>

<br>
</div>
<div style="float:left;"> <img src="http://goa.dev/components/com_sobi2/images/info.png" alt="Подсказка" title="Подсказка::Укажите, где расположен ваш объект, кликнув по соответствующей точке.  Используйте регулировку масштаба и смену режимов отображения (карта, спутник, гибрид)."/></div>

В коде вместо {googleApiKey} вставляем свой ключ и выставляем координаты стартовой точки

var start_latitude = «17.437531155373254»;

var start_longitude = «70.83407598361373»

а так же уровень приближения

var zoomlevel_add = 8;

var zoomlevel_edit = 3;

Сохраняем поле.

Теперь карта гугла работает как надо)

Если есть желание обновить карту до версии 3 (в sobi2 используется v2) то необходимо заменить стандартную функцию гугл карты находчщуюся в файле /components/com_sobi2/ncludes/entry.functions.php на представленную ниже:

function showGoogleMaps($mySobi, $config)
    {

		if( !$config->useGoogleMaps) {
			return null;
		}

		$title = $config->jsAddSlashes( $mySobi->title );
		$GeoPos = $config->getGeoPosition( $mySobi->id );
		if( $GeoPos['lat'] && $GeoPos['long'] && is_numeric( $GeoPos['lat'] ) && is_numeric( $GeoPos['lat'] ) ) {
			?>
						<div style="width: <?php echo $config->googleMapsWidth; ?>px; height: <?php echo $config->googleMapsHeight; ?>px;" id="sobi2GoogleMaps"></div>
					<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
						<script type="text/javascript">
				//<![CDATA[

				function initialize() {
					var myLatlng = new google.maps.LatLng(<?php echo $GeoPos['lat']; ?>, <?php echo $GeoPos['long']; ?>);
					var myOptions = {
						zoom: <?php echo $config->googleMapsZoom; ?>,
						center: myLatlng,
						mapTypeControl: false,
						navigationControl: true,
						navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL},
						mapTypeId: google.maps.MapTypeId.ROADMAP
					}
					var map = new google.maps.Map(document.getElementById("sobi2GoogleMaps"), myOptions);

					var marker = new google.maps.Marker({
					position: myLatlng,
					map: map,
					title:"<?php echo _SOBI2_GOOGLEMAPS_LABEL; ?>"
					}); 

				}

                 google.maps.event.addDomListener(window,'load', initialize);

				//]]>
						</script>
<?php
		}
		elseif ((strlen(trim($GeoPos['lat'])) && strlen(trim($GeoPos['long']))) && (!is_numeric($GeoPos['lat']) || !is_numeric($GeoPos['lat']))) {
			trigger_error("HTML_SOBI::showGoogleMaps(): Given cooordinates ({$GeoPos['lat']}, {$GeoPos['long']}) are not correct. Please enter float values");
		}
    }
Запись опубликована в рубрике Joomla, Разговорчики с метками . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *