Search
Write a publication
Pull to refresh

Организация Яндекс.Карт с помощью темизации Views в Drupal 6

Здравствуйте!

Два месяца назад передо мной поставили задачу организовать на сайте карту с метками.

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

Ранее я уже использовал API Яндекс.Карт. Проверив наличие необходимых мне адресов, я приступил к реализации.

Результаты поиска готовых решений меня не удовлетворили. Оценив время на разработку нового модуля, я пришел к выводу, что быстрее для меня будет темизировать вывод модуля Views.


Я создал новый тип контента, содержащий поля для координат, типа метки (тип метки на выходе задает стиль значка), и содержимого балуна.

На выходе мне нужен был скрипт примерно такого вида:

var now_house = new YMaps.Placemark(new YMaps.GeoPoint(82.814885,54.992361), {hideIcon: true, style:washome}); //Создание метки с заданными координатами и стилем washome

now_house.setBalloonContent('

Благоустройство внутриквартальных территорий, ул. Невельского, 55

'); //Задание содержимого балуна

map.addOverlay(now_house);


Я создал View с выводом нужных мне полей и добавил в него блок.

В настройках блока, в Basic setting, кликнув на Theme: Information можно получить список файлов для темизации:



В итоге, для вывода карты, мне потребовалось немного переделать вывод всего пяти файлов модуля Views:



Файл views-view-field--megamap-view--field-megacoords-value.tpl.php отвечает за вывод координат:

<?php print "var now_house = new YMaps.Placemark(new YMaps.GeoPoint(".$output."), {hideIcon: true, "; ?>


Файл views-view-field--megamap-view--field-placemark-description-value.tpl.php выводит стиль метки:

<?php print "style:".$output."});"; ?>


В шаблон страницы уже включен скрипт формирования карты и стилей для меток, поэтому включив блок Views в шапку сайта, я получил вывод:

var nowhome = new YMaps.Style();

nowhome.iconStyle = new YMaps.IconStyle();
nowhome.iconStyle.href = "images/b-home.png";
nowhome.iconStyle.size = new YMaps.Point(30, 41);
nowhome.iconStyle.offset = new YMaps.Point(-15, -49);

nowhome.iconStyle.shadow = new YMaps.IconShadowStyle();
nowhome.iconStyle.shadow.href = "images/iconshadow.png";
nowhome.iconStyle.shadow.size = new YMaps.Point(50, 30);
nowhome.iconStyle.shadow.offset = new YMaps.Point(-15, -37);

...

var now_house = new YMaps.Placemark(new YMaps.GeoPoint(82.814885,54.992361), {hideIcon: true,

style:nowhome});

now_house.setBalloonContent('

Благоустройство внутриквартальных территорий, ул. Невельского, 55

'); map.addOverlay(now_house);


А вот, собственно, сама карта:



Возможно, это не самое изящное решение, но я получил определенный опыт.
Надеюсь, для людей, которые начинают осваивать Drupal, данная статья окадется полезной.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.