У битрикс есть стандартный компонент bitrix:map.yandex.view, я уже поставил туда свои иконки.
Осталось настроить кластеризацию.
Читал это
dev.1c-bitrix.ru/community/webdev/user/17090/blog/13131
Но там используется предыдущая версия комп. поэтому ко мне это не подходит.
По коду видно что новый компонент кластеризация включена.
Однако не понятно как её включить?
script.js ->if (!window.BX_YMapAddPlacemark)
{
window.BX_YMapAddPlacemark = function(map, arPlacemark)
{
if (null == map)
return false;
if(!arPlacemark.LAT || !arPlacemark.LON)
return false;
var props = {};
if (null != arPlacemark.TEXT && arPlacemark.TEXT.length > 0)
{
var value_view = '';
if (arPlacemark.TEXT.length > 0)
{
var rnpos = arPlacemark.TEXT.indexOf("\n");
value_view = rnpos <= 0 ? arPlacemark.TEXT : arPlacemark.TEXT.substring(0, rnpos);
}
props.balloonContent = arPlacemark.TEXT.replace(/\n/g, '<br />');
props.hintContent = value_view;
}
var obPlacemark = new ymaps.Placemark(
[arPlacemark.LAT, arPlacemark.LON],
props,
{
balloonCloseButton: true,
iconImageHref:"/places/marker_sw_small.png"
}
);
map.geoObjects.add(obPlacemark);
return obPlacemark;
}
}
if (!window.BX_YMapAddPolyline)
{
window.BX_YMapAddPolyline = function(map, arPolyline)
{
if (null == map)
return false;
if (null != arPolyline.POINTS && arPolyline.POINTS.length > 1)
{
var arPoints = [];
for (var i = 0, len = arPolyline.POINTS.length; i < len; i++)
{
arPoints.push([arPolyline.POINTS[i].LAT, arPolyline.POINTS[i].LON]);
}
}
else
{
return false;
}
var obParams = {clickable: true};
if (null != arPolyline.STYLE)
{
obParams.strokeColor = arPolyline.STYLE.strokeColor;
obParams.strokeWidth = arPolyline.STYLE.strokeWidth;
}
var obPolyline = new ymaps.Polyline(
arPoints, {balloonContent: arPolyline.TITLE}, obParams
);
map.geoObjects.add(obPolyline);
return obPolyline;
}
}
template.php с встроенной кластеризацией - >
<script type="text/javascript">
function BX_SetPlacemarks_<?echo $arParams['MAP_ID']?>(map)
{
<?if(count($arResult['POSITION']['PLACEMARKS'])>1):?>
//clusterer = new ymaps.Clusterer();
//clusterer.add(arObjects.PLACEMARKS);
//map.geoObjects.add(clusterer);
<?endif;?>
if(typeof window["BX_YMapAddPlacemark"] != 'function')
{
/* If component's result was cached as html,
* script.js will not been loaded next time.
* let's do it manualy.
*/
(function(d, s, id)
{
var js, bx_ym = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "<?=$templateFolder.'/script.js'?>";
bx_ym.parentNode.insertBefore(js, bx_ym);
}(document, 'script', 'bx-ya-map-js'));
var ymWaitIntervalId = setInterval( function(){
if(typeof window["BX_YMapAddPlacemark"] == 'function')
{
BX_SetPlacemarks_<?echo $arParams['MAP_ID']?>(map);
clearInterval(ymWaitIntervalId);
}
}, 300
);
return;
}
var arObjects = {PLACEMARKS:[],POLYLINES:[]};
<?
if (is_array($arResult['POSITION']['PLACEMARKS']) && ($cnt = count($arResult['POSITION']['PLACEMARKS']))):
for($i = 0; $i < $cnt; $i++):
?>
arObjects.PLACEMARKS[arObjects.PLACEMARKS.length] = BX_YMapAddPlacemark(map, <?echo CUtil::PhpToJsObject($arResult['POSITION']['PLACEMARKS'][$i])?>);
<?
endfor;
endif;
if (is_array($arResult['POSITION']['POLYLINES']) && ($cnt = count($arResult['POSITION']['POLYLINES']))):
for($i = 0; $i < $cnt; $i++):
?>
arObjects.POLYLINES[arObjects.POLYLINES.length] = BX_YMapAddPolyline(map, <?echo CUtil::PhpToJsObject($arResult['POSITION']['POLYLINES'][$i])?>);
<?
endfor;
endif;
if ($arParams['ONMAPREADY']):
?>
if (window.<?echo $arParams['ONMAPREADY']?>)
{
window.<?echo $arParams['ONMAPREADY']?>(map, arObjects);
}
<?
endif;
?>
}
</script>