Изменяем компонент каталога SOBI2 для Joomla – продолжение.

На своем блоге я уже писал как можно изменить компонент каталога SOBI2 для Joomla, заменив карты Google на Яндекс.Карты.

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

Для этого в начале, в режиме администрирования сайта мы заходим в раздел компонента SOBI2 и выбираем пункт меню Настройка полей.

Для полей Широта (filds_lonmap) и Долгота (filds_latmap) необходимо изменить параметр Административное поле, установить параметр – нет.

После этого необходимо создать еще одно новое поле.

Название поля: field_fsmap

Заголовок поля: Задать координаты по карте

Тип поля: text code

Опубликовано: Да

Административное поле: Нет

В поле Текстовый код ввести следущий текст:

<script src="http://api-maps.yandex.ru/1.1/index.xml?key={googleApiKey}" type="text/javascript"></script>
 
<div id="YMapsID" style="width:400px;height:300px"></div>
 
<script type="text/javascript">
    //<![CDATA[
var placemark;           
            window.onload = function init () {
            var map = new YMaps.Map(document.getElementById("YMapsID"));
            map.setCenter(new YMaps.GeoPoint(43.964988,56.318426), 10);
 
            map.addControl(new YMaps.SmallZoom());
 
 
YMaps.Events.observe(map, map.Events.Click, function (map, mEvent) {
 
                map.removeOverlay(placemark);
 
                var newGeoPoint = mEvent.getGeoPoint();	
 
                placemark = new YMaps.Placemark(newGeoPoint);
                map.addOverlay(placemark);
 
                document.getElementById('field_lat').value = newGeoPoint.getLat();
                document.getElementById('field_lonmap').value = newGeoPoint.getLng();
 
          });               
 
          }	
 
//]]>
</script>

Данный код будет подставлять Яндекс.Карту в форму добавления записи в справочник.

По щелчке на карте в поля формы Широта (filds_lonmap) и Долгота (filds_latmap) будут подставляться соответствующие значения, на карте в данной точке появиться метка.

Что особенного в данном коде.

В первой строке вместо параметра {googleApiKey} будет подставляться ключ API Яндекс.Карт для вашего сайта.

После мы задаем размер окна карты 400 на 300 пикселей.

Затем идет код скрипта инициализации карты.

Мы задаем координаты центра и начальный уровень масштаба.

Добавляем элемент  управления масштабом YMaps.SmallZoom.

После этот идет функция обработки события щелчка мыши по карте.

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

Поле для вывода карты помещаем выше полей ввода значений координат.

Посмотреть, как это работает можно здесь
.
И еще можно сделать метку на карте перемещаемой и отслеживая событие менять координаты в полях широты и долготы.

У меня спрашивали, как сделать так, чтобы карта располагалась ниже всех данных, это очень просто нужно изменить  файл sobi2.details.tmpl.php, который находится в папке

/папка установки Joomla/components/com_sobi2/templates/default/

Там найти код:

<tr>
        <td><?php HTML_SOBI::showGoogleMaps($mySobi, $config); ?></td>
</tr>

Вырезать его и вставить перед строчками

</table>
<table class="sobi2DetailsFooter" width="100%">

Это все что я хотел вам рассказать.

  • Гость: Спасибо! Как раз то, что мне нужно было. Отмечу небольшие ошибки в приведённом коде. В сточках: document.getElementById('field_lat').value = newGeoPoint.getLat(); document.getElementById('field_lonmap').value = newGeoPoint.getLng(); В первой не верно указано имя поля, должно быть - latmap, и в обеих сроках нужно заменить символ апострофа на двойные кавычки. Иначе сохранить текст в настройках не получится. У меня получилось вот так: document.getElementById("field_latmap").value = newGeoPoint.getLat(); document.getElementById("field_lonmap").value = newGeoPoint.getLng();
  • Гость: Спасибо admin! Реально выручил. Респект! Linwood, насчёт ошибок с первой согласен, а со второй нет. У меня всё ок с апострофами работает.
  • Гость: А как прикрутить вместо стандартной карты Yandex народную? Очень надо.
  • Гость: Нужно сделать два действия: 1. Добавить подключение модуля Народной карты к ключу API. 2. Добавить необходимый тип для Народной карты (Схема или Гибрид). Если необходимо напишу заметку по этому вопросу.
  • Гость: Напишите пожалуйста
  • Гость: При добавлении &amp;modules=pmap в хвост ключа ничего не меняется к сожалению... как была обычная карта, так и осталась(( А надо народную
  • Гость: А можно ли карту также интегрировать в VirtueMart?