Нужно сделать, что бы вместо оригинального значка маркера был тот, что я пришил к посту. В настройках модуля загрузки нет, через ксс пробовал менять, сработало, но криво, ибо вёрстка сделана под иконку с хвостиком у маркера справа как в оригинале, а не по середине как у меня(у моего варианта хвостик скрыт и я не знаю как его выковырять).
Вложение | Размер |
---|---|
![]() | 2.37 КБ |
Комментарии
Чтобы получить доступ к маркеру и другим функциям необходимо создать карту программно. Для начала необходимо подключить сам скрипт карт:
Далее создаем карту по параметрам описанным ниже (более подробно описанные примеры и информацию можно найти здесь https://tech.yandex.ru/maps/jsbox/2.1/ ):
function init () {
var myMap3 = new ymaps.Map("map3", {
center: [55.77127434, 37.63492426],
zoom:17,
controls: ["zoomControl"]
});
myMap3.controls.add('fullscreenControl',{float: 'left'});
// Создаем геообъект с типом геометрии "Точка".
myGeoObject = new ymaps.GeoObject();
myMap3.geoObjects
.add(new ymaps.Placemark([55.77101400, 37.63209300], {
balloonContent: 'Ул. Уличная,д. 22'
}, {
// Опции.
// Необходимо указать данный тип макета.
iconLayout: 'default#image',
// Своё изображение иконки метки.
iconImageHref: '/images/map_icon.png',
// Размеры метки.
iconImageSize: [203, 254],
// Смещение левого верхнего угла иконки относительно
// её "ножки" (точки привязки).
iconImageOffset: [-80, -254]
}));
Центр карты можно найти как из url на яндекс карте (там просто много чисел, и можно сразу не разобраться), так и сторонним способом, например: http://webmap-blog.ru/tools/getlonglat-ymap2.html
В функции init(), есть строка вида:
где "map3", указатель на блок вида:
Соответственно по вышеуказанным параметрам скрипта можно сформировать:
- позицию центра карты, и отдельно позицию маркера (в случае когда он должен быть не по центру, и смещен, в углу например)
- кастомный маркер (необходимо указать его размер, можно настоящий а можно и смашстабированный + смещение относительно точки, предполагая, что маркер расположен справа внизу от указанной точки маркера)
- так же необходимо указать/подобрать необходимый масштаб карты
- можно добавить необходимые виджеты (фулскрин, линейку и т.п.)
upd: в последствии блоку map3 необходимо задать высоту+ширину, дабы его было видно.
В коде пропущено закрытие };
Пожалуй, выложу пример для работы с модулем. В общем, после установки яндекс модуля и появления поля для выбора позиции карты, нужно переопределить шаблон типа материала, где нужна карта, и прописать следующий код
//
$bb = $node;
//
$bb1 = $bb->field_of_map['und'][0]['placemarks'] ;
$bb5 = $bb->field_of_map['und'][0]['placemarks'] ;
//
$bb2 = json_decode($bb1)[0]->params;
//
//print_r( json_decode($bb1)[1]->coords );
$bb1 = json_decode($bb1)[0]->coords;
//
$bb = $bb->field_of_map['und'][0]['coords'];
$bb = json_decode($bb);
?>
<div id="map" style="width: 100%; height: 400px"></div>
<script type="text/javascript">
ymaps.ready(init);
var myMap,
myPlacemark;
function init(){
myMap = new ymaps.Map("map", {
center: [ <?php print $bb->center[0]; ?>, <?php print $bb->center[1]; ?>] <?php // print $bb->center; ?>,
zoom: <?php print $bb->zoom; ?>
});
<?php
$arrY = '';
//json_decode($bb1)[0]->coords;
foreach( json_decode($bb5) as $key => $e ){
$e1 = $e->coords;
$e2 = $e->params->iconContent; //[params] => stdClass Object ( [color] => white [iconContent]
$arrY .= '.add(new ymaps.Placemark(['.$e1[0].','.$e1[1].'], {'.
'hintContent: "'.$e2.'"'.
'}, {'.
'iconLayout: "default#image",'.
'iconImageHref:"'.$base_url.'/themes/bartik/images/ikon_yand.png'.'",'.
'iconImageSize: [135, 79],'.
'iconImageOffset: [-62, -79]'.
'}))';
}
print 'myMap.geoObjects'.$arrY.';';
?>
}
</script>