Для CMS Joomla существует большое количество разнообразных компонентов, которые помогают расширить ее возможности и функциональность.
Одним из них является компонент K2, представляющий из себя конструктор контента, с его помощью Вы можете создать на своем сайте каталог неограниченной вложенности категорий, блог с возможностью комментирования записей и многое друге.
Если Вам необходимо показать местоположение какого-либо объекта или новости на карте, то было бы не плохо иметь возможность добавить ее в статьи компонента K2.
Существуют различные дополнения позволяющие это сделать, найти их можно в каталоге расширений Joomla ().
Плохо, то что все они платные.
После долгого поиска я нашел бесплатный плагин, с возможностью добавления карт Google Maps в статьи компонента K2.
Называется он K2 Maps и загрузить его можно здесь.
Он выводит статическую карту Google Maps в материале.
Прочитать о статических картах.
Как он работает?
Предположим что у Вас уже установлена последняя версия компонента K2 и русский язык для него (скачать можно на сайте разработчика http://getk2.org/ и языковый файл http://getk2.org/extend/translations ).
Устанавливаем, загруженный архив с плагином, стандартным способом через менеджер расширений.
Активируем установленный плагин K2 Plugin — Google Maps.
После этого при создании нового материала в компоненте K2, ниже окна для ввода текста страницы появляется форма для добавления параметров отображения карты Google Maps.
Опишу их подробнее.
Longitude — значение географической координаты долготы для метки;
  Latitude — значение географической координаты широты для метки;
  Marker Color — цвет значка маркера на карте;
  Title of the position — текстовое обозначение на маркере (буквенное или цифровое);
  Zoom — уровень масштаба карты;
  Width of the map — ширина окна карты в пикселях;
  Height of the map — высота окна карты в пикселях; 
  Map Type — тип отображения карты.
Для примера вводим следующие параметры:
Тогда при просмотре материала на сайте мы наблюдаем следующее:
Еще одним положительным моментом работы плагина является, что он успешно работает с версией компонента K2 в Joomla версий 1.5 и 2.5.
  Для тестирования я использовал K2 версии 2.5.6 и плагина 1.1.1
Определить координаты для конкретного адреса можно используя специальный инструмент на моем блогге.
Вы вводите в строку поиска искомый адрес, нажимаете на кнопку «Найти», на карте найденный объект помечается маркером, а в низу в поле формы указаны его координаты. Можно также перемещать маркер по карте, в форме будут показываться его новые координаты.
Плагин конечно хороший, но иногда не достаточно статической карты, бывает нужно посмотреть что находится вокруг данного места, для этого необходимо использование динамической карты с возможностью изменения масштаба и панорамированием.
Давайте изменим исходных плагин так, чтобы было возможно использовать и динамический режим отображения карты.
Для этого нам необходимо отредактировать файлы плагина, расположенные в папке: <папка установки Joomla>/plugins/k2/.
С начала отредактируем файл maps.xml
Открываем его в тестовом редакторе и сразу после строки
| <params group="item-content"> | 
добавляем код для возможности выбора статической или динамической карты:
| <param name="classmap" type="radio" default="1" label="Статический вид карты" description="Использовать статический вид карты"> <option value="0">Нет</option> <option value="1">Да</option> </param> | 
И еще я заменил цвет одной метки с черного на розовый (Black на Pink).
После строки
| <option value="yellow">Yellow</option> | 
следующая стала иметь вид:
| <option value="pink">Pink</option> | 
Сохраняем измененный файл в кодировке UTF-8.
Теперь редактируем файл maps.php.
В нем сразу после строки
| $plugins = new K2Parameter($item->plugins, '', $this->pluginName); | 
добавляем строку для получения параметра classmap из формы в файле maps.xml
| $vidmap = $plugins->get('classmap'); | 
И теперь нужно добавить условие при котором когда $vidmap = 1 отображалась статическая карта, а иначе динамическая.
Для этого мы имеющийся код:
| $output = '<img src="http://maps.google.com/maps/api/staticmap?center='.$longitude.','.$latitude.'&zoom='.$zoom.'&size='.$width.'x'.$height.'&maptype='.$type.'&markers=color:'.$color.'|label:'.$marker.'|'.$longitude.','.$latitude.'&sensor=false"/>'; | 
заменяем на следующий:
| if($vidmap == 1)
		{
		$output = '<img src="http://maps.google.com/maps/api/staticmap?center='.$longitude.','.$latitude.'&zoom='.$zoom.'&size='.$width.'x'.$height.'&maptype='.$type.'
&markers=color:'.$color.'|label:'.$marker.'|'.$longitude.','.$latitude.'&sensor=false"/>';
		}
		else
		{
		switch($color)
		{
			case 'green': $image = "http://www.google.com/intl/en_us/mapfiles/ms/micons/green-dot.png";
			break;
			case 'blue': $image = "http://www.google.com/intl/en_us/mapfiles/ms/micons/blue-dot.png";
			break;
			case 'yellow': $image = "http://www.google.com/intl/en_us/mapfiles/ms/micons/yellow-dot.png";
			break;
			case 'pink': $image = "http://www.google.com/intl/en_us/mapfiles/ms/micons/pink-dot.png";
			break;
			default: $image = "http://www.google.com/intl/en_us/mapfiles/ms/micons/red-dot.png";
		}
 
	  switch($type)
		{ 	
		case 'satellite': $type_map = 'google.maps.MapTypeId.SATELLITE';
		break;
		case 'terrain': $type_map = 'google.maps.MapTypeId.TERRAIN';
		break;
		case 'hybrid': $type_map = 'google.maps.MapTypeId.HYBRID';
		break;
		default: $type_map = 'google.maps.MapTypeId.ROADMAP';
		}
 
		 $output ='
		 <script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
  function initialize() {
    var myLatlng = new google.maps.LatLng('.$longitude.','.$latitude.');
    var myOptions = {
      zoom: '.$zoom.',
      center: myLatlng,
      mapTypeId: '.$type_map.'
    }
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
 
	var image = "'.$image.'";
 
    var marker = new google.maps.Marker({
        position: myLatlng, 
        map: map,
		icon: image,
        title: "Здесь"
    });   
  }
 
  function loadScript() {
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src = "http://maps.google.com/maps/api/js?sensor=false&callback=initialize";
    document.body.appendChild(script);
  }
 
  window.onload = loadScript;
 
</script>
  <div id="map_canvas"  style="width:'.$width.'px;height:'.$height.'px"></div>';
 
		} | 
В этом коде при $vidmap = 1 как и прежде отображается статическая карта, а иначе формируется код для вывода динамической карты.
Отображается карта с меткой заданного цвета.




Title of the position — текстовое обозначение на маркере (буквенное или цифровое);
Не зависимо от того вписываю или нет текстовое обозначение маркера, при наведении на него отображается слово «Здесь». Можно ли как-нибудь вылечить?
Можно, если в место строки определения текста для маркера title: «Здесь» написать следующий код:
title: «‘.$marker.'»
И еще вопрос, а нельзя карты от гугла заменить яндекс картами, с сохранением всех полей. Другими словами, сейчас есть 150 статей в которые вставлена карта гугл, как то бы заменить ее на карту яндекс с минимальными трудозатратами, это возможно или нет?
Спасибо.
Да возможно. Нужно заменить код карты в файле map.php на код для API Яндекс.Карт. Значения координат широты и долготы поменять местами.
Если Вы будете использовать API Яндекс.Карт 1.1, то необходимо будет прямо в коде прописать ключ для вашего сайта.
Спасибо большое, попытаюсь сделать!
А если в Вас найдется время интегрировать карту Яндекс, то, я думаю, получится еще одна интересная и полезная статья не только для меня, но и для всех пользователей Joomla + K2
Однако у меня получилось, на все про все ушло минут 10, еще раз спасибо.
А множество меток поддерживается? Например, надо вывести все объекты на карту, такое возможно? Заранее спасибо за ответ.
Здравствуйте!
Спасибо за модификацию, супер плагин.
Настроил и включил модифицированый плагин, все работает отлично. Но появился баг,в позиции где находится ссылка на статью с картой, постоянно на всех страницах статей К2 появляется карта 🙂 . Возможно Вы уже сталкивались с подобным глюком, как его решить?