Вывод объектов из каталога на карту Google
[spoiler]
Для реализации задачи использовал стандартные компоненты БУСа.
1. catalog.section
2. map.google.view
В БУСе есть компонент, для отображения карт гугла.
На картах возможно разместить маркеры и добавить к ним описание.
Для этого нужно передать карте массив, следующего вида
маркер 1 широта долгота текст маркера маркер 1 широта долгота текст маркера |
Подразумевается, что объект это инфоблок, который имеет свойство MAP "привязка к карте google"
Для начала необходимо создать несколько объектов и привязать их к карте.
К сожалению поиск по карте у меня работает только в админ панели. Может кто знает как это лечится
Далее необходимо создать страницу, на которой будет размещен компонент.
Размещаем на ней компонент catalog.section и настраиваем его на отображение объектов.
После этого копируем шаблон компонента, для редактирования и заменяем код в шаблоне на новый
<? if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();// как всегда?> <? if(count($arResult["ITEMS"]) > 0){ // если есть объекты для отображения, то $PLACEMARKS = array(); //Создаем массив маркеров $i=0; foreach($arResult["ITEMS"] as $arElement) { //получаем объект foreach ($arElement["DISPLAY_PROPERTIES"] as $pid=>$arProperty) { if($pid=="MAP") { //Получаем координаты объекта $MAP = explode (",", $arProperty["VALUE"]);} // и переводим их в формат карты) $TEXT = "<table><tr><td><a href=\"".$arElement["DETAIL_PAGE_URL"]."\"><img src=\"".$arElement['PREVIEW_PICTURE']['SRC']."\" \/></a></td><td>".$arElement["NAME"]."<br />".$arElement["PREVIEW_TEXT"]."</td></tr></table>";//составляем текстовое поле маркера. Возможно использовать html и php. $PLACEMARKS[$i]["LON"] = $MAP[1]; //Заполняем массив маркера данными $PLACEMARKS[$i]["LAT"] = $MAP[0]; // $PLACEMARKS[$i]["TEXT"] = $TEXT; // }; $i++; // };//переход к следующему маркеру, если он есть };?> <? // Массив маркеров $PLACEMARKS готов ?> <? // Вызываем компонент отображающий карту ?> <? $APPLICATION->IncludeComponent("bitrix:map.google.view", "", array("INIT_MAP_TYPE" => "HYBRID", "MAP_DATA" => serialize( array( 'google_lat' => $MAP[0], // координаты центра карты 'google_lon' => $MAP[1], // используем координаты последнего маркера 'google_scale' => 10, // масштаб карты 0-20 'PLACEMARKS' => $PLACEMARKS // подготовленный ранее массив маркеров ) ), "MAP_WIDTH" => "900", // Ширина карты "MAP_HEIGHT" => "500", // Высота "CONTROLS" => array( // отображаемые элементы карты 0 => "SMALL_ZOOM_CONTROL", 1 => "TYPECONTROL", 2 => "SCALELINE", ), "OPTIONS" => array(// настройки интерфейса карты 0 => "ENABLE_SCROLL_ZOOM", 1 => "ENABLE_DBLCLICK_ZOOM", 2 => "ENABLE_DRAGGING", 3 => "ENABLE_KEYBOARD", ), "MAP_ID" => "" // не понял зачем он нужен ), false, array("ACTIVE_COMPONENT" => "Y") );?> |
Возможно использовать совместно с фильтром. Это позволит выбрать нужные объекты.
Также можно использовать и с компонентом catalog.link.element
Пример не претендует на оптимальность и приведен для понимания принципа работы битрикса с картами гугла.
Например можно написать свой компонент.
PS вск вышесказанное актуально и для карт яндекса