Довольно часто на сайтах клиентов требуется реализовать отображение Яндекс карт:
При этом необходимо, чтобы контент-менеджер не заморачивался с настройкой отображения. В Битриксе реализация оказалась довольно простой.
Итак, приступим:
Первое, что мы должны сделать, это создать свойство у инфоблока, который содержит информацию о адресах:
Тип свойства — «Привязка к Яндекс. Карте». Как это выглядит со стороны контент-менеджера? А вот так:
Контент-менеджер вводит соответствующий адрес в поле «Поиск по карте» и получает координаты точки. Ага! Координаты у нас есть, а это значит, что можно воспользоваться API-шкой Яндекс. Карт. Заходим в их Песочницу и изучаем пример: https://tech.yandex.ru/maps/jsbox/2.1/placemark
Давайте реализуем отображение на основе него:
<!--подключаем яндекс карты--> <script src="http://api-maps.yandex.ru/2.1/?lang=ru-RU" type="text/javascript"></script> <? $iblock_id = 1; // id инфоблока адресов $contact_res_filter = array("IBLOCK_ID" => $iblock_id, "ACTIVE" => "Y"); $contact_res_select = array ("ID", "NAME", "PROPERTY_YMAP", ); $contact_res = CIBlockElement::GetList(Array('sort'=>'asc'), $contact_res_filter, false, false, $contact_res_select); while ($contact_ob = $contact_res->GetNext()){ ?> <!--какая-то вёрстка отображения адресов, телефонов и прочего--> <?if ($contact_ob['PROPERTY_YMAP_VALUE']):?> <script> function init_<?=$contact_ob['ID']?>(){ var myMap = new ymaps.Map("map_<?=$contact_ob['ID']?>", { center: [<?=$contact_ob['PROPERTY_YMAP_VALUE']?>], zoom: 10 }, { searchControlProvider: 'yandex#search' }); myMap.geoObjects.add(new ymaps.Placemark([<?=$contact_ob['PROPERTY_YMAP_VALUE']?>], { balloonContent: '<?=$contact_ob['NAME']?>' }, { preset: 'islands#dotIcon', iconColor: '#3b5998' })); } ymaps.ready(init_<?=$contact_ob['ID']?>); </script> <div id = "map_<?=$contact_ob['ID']?>"> </div> <?endif;?> <? } ?>
Поясню код:
Каждая карта будет отображаться в div-нике с уникальным id-ником по шаблону map_<?=$contact_ob[‘ID’]?>
Перебирая в foreach-е элементы инфоблока с адресами мы пытаемся получить координаты из свойства PROPERTY_YMAP_VALUE. Если получилось их получить, то создаём функцию инициализации отображения Яндекс. Карты с названием по шаблону init_<?=$contact_ob[‘ID’]?>. Далее просто описываем необходимые данные: координаты центра карты, масштаб и т.д. и добавляем нашу «марку» на карту. В качестве подсказки использовано название элемента инфоблока адресов: <?=$contact_ob[‘NAME’]?>.
После этого подпихиваем эту функцию в ready и вуа-ля! Готово!