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

Автор: | 17.01.2010

На своем блоге я уже писал как можно изменить компонент каталога 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%">

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

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

  1. Linwood

    Спасибо! Как раз то, что мне нужно было.
    Отмечу небольшие ошибки в приведённом коде. В сточках:

    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();

  2. Жека

    Спасибо admin! Реально выручил. Респект!
    Linwood, насчёт ошибок с первой согласен, а со второй нет. У меня всё ок с апострофами работает.

  3. Игорь

    А как прикрутить вместо стандартной карты Yandex народную?
    Очень надо.

    1. admin Автор записи

      Нужно сделать два действия:
      1. Добавить подключение модуля Народной карты к ключу API.
      2. Добавить необходимый тип для Народной карты (Схема или Гибрид).
      Если необходимо напишу заметку по этому вопросу.

  4. Игорь

    При добавлении &modules=pmap в хвост ключа ничего не меняется к сожалению… как была обычная карта, так и осталась(( А надо народную

Добавить комментарий для admin Отменить ответ

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