Клуб API Карт

Создание clusterBalloonContentLayout вместе с clusterBalloonItemContentLayout

andrey.yashchak@looi.co
19 марта 2016, 18:25

Коллеги, прошу прощения, если этот вопрос окажется совсем глупым.
Но поиск в интернетах и в глубине гитхаба не дал результатов.
Есть ли способ создания clusterBalloonContentLayout, да таким образом чтобы внутри него не заниматься отрисовкой шаблона для clusterBalloonItemContentLayout.
Всмысле чтобы был код вроде
 

cluster_balloon_content_layout  = ymaps.templateLayoutFactory.createClass(
'<div class="cluster_balloon">'+
  '<div class="header"></div>'+
  '<div class="items">'+
  '{% for item in %properties.geoObjects}'+
     '$[cluster_balloon_item_content текущего объекта]'+
   {% endfor %}'+
  '</div>'+
'</div>')
cluster_balloon_item_content = ymaps.templateLayoutFactory.createClass("<div>$[properties.text]</div>");

16 комментариев
clusterBallooItemContentLayout это макет контента активной метки
https://tech.yandex.ru/maps/jsbox/2.1/cluster_balloon_twoColumns_21
andrey.yashchak@looi.co
19 марта 2016, 20:29
dimik,
спасибо за ответ. Почти все Ваши ответы с 2013 года прям очень спасают)
Нашел panelContentLayout, жаль, что про это всего одна строчка в мане(
andrey.yashchak@looi.co
19 марта 2016, 21:22
dimik,
https://yandex.ru/blog/mapsapi/50128/56a93065b15b79e31e0cd8aa - ситуация не изменилась?
andrey.yashchak@looi.co,
Выложите картинку, что и как именно вы хотите поменять
andrey.yashchak@looi.co
20 марта 2016, 16:05
dimik,
http://savepic.ru/9051387.jpg
Нарисовал схематично, прошу прощения, не художник)
1 - balloonLayout
2 - balloonItemContentLayout
3 - balloonPanelContentLayout
4 - balloonContentLayout
Можно, конечно, сделать все внутри balloonContentLayout, как в примере https://tech.yandex.ru/maps/jsbox/2.1/cluster_custom_balloon_content_layout_21, но тогда это идет в ущерб DRY :(
andrey.yashchak@looi.co
20 марта 2016, 17:54
dimik,
Чет и правда надеялся на "волшебный копипаст")
andrey.yashchak@looi.co,
В данный момент так как вы хотите сделать не получится. Только вариант полностью сделать свой макет
andrey.yashchak@looi.co,
А можете пояснить, почему не подходит вот такое решение? https://tech.yandex.ru/maps/jsbox/2.1/cluster_balloon_carousel
mari-na-bzzz,
 Добрый вечер.
Марина, подскажите, как сделать чтобы при клике по метке (в кластере аккордеон) не отображался clusterBalloonItemContentLayout ?


Вот модифицированный код Вашей ссылки выше:
ymaps.ready(function () {
var mapCenter = [55.755381, 37.619044],
map = new ymaps.Map('map', {
center: mapCenter,
zoom: 9,
controls: []
});
// Создаем собственный макет с информацией о выбранном геообъекте.
var customItemContentLayout = ymaps.templateLayoutFactory.createClass(
// Флаг "raw" означает, что данные вставляют "как есть" без экранирования html.
'Какое свойство задать, чтобы при клике по метке эта область вообще не отображалась?'
);
var clusterer = new ymaps.Clusterer({
clusterDisableClickZoom: true,
clusterOpenBalloonOnClick: true,
// Устанавливаем стандартный макет балуна кластера "Карусель".
clusterBalloonContentLayout: 'cluster#balloonAccordion',
// Устанавливаем собственный макет.
clusterBalloonItemContentLayout: customItemContentLayout,
// Устанавливаем режим открытия балуна.
// В данном примере балун никогда не будет открываться в режиме панели.
clusterBalloonPanelMaxMapArea: Infinity,
// Устанавливаем размеры макета контента балуна (в пикселях).
clusterBalloonContentLayoutWidth: 200,
clusterBalloonContentLayoutHeight: 130,
// Устанавливаем максимальное количество элементов в нижней панели на одной странице
clusterBalloonPagerSize: 5
// Настройка внешего вида нижней панели.
// Режим marker рекомендуется использовать с небольшим количеством элементов.
// clusterBalloonPagerType: 'marker',
// Можно отключить зацикливание списка при навигации при помощи боковых стрелок.
// clusterBalloonCycling: false,
// Можно отключить отображение меню навигации.
// clusterBalloonPagerVisible: false
});
// Заполняем кластер геообъектами со случайными позициями.
var placemarks = [];
for (var i = 0, l = 100; i < l; i++) {
var placemark = new ymaps.Placemark(getRandomPosition(), {
// Устаналиваем данные, которые будут отображаться в балуне.
balloonContentHeader: 'Как сделать чтобы при клике по мне не отображался clusterBalloonItemContentLayout ?',
balloonContentBody: getContentBody(i),
balloonContentFooter: 'Мацуо Басё'
});
placemarks.push(placemark);
}
clusterer.add(placemarks);
map.geoObjects.add(clusterer);
function getRandomPosition () {
return [
mapCenter[0] + (Math.random() * 0.3 - 0.15),
mapCenter[1] + (Math.random() * 0.5 - 0.25)
];
}
var placemarkBodies;
function getContentBody (num) {
if (!placemarkBodies) {
placemarkBodies = [
['Слово скажу -', 'Леденеют губы.', 'Осенний вихрь!'].join('<br/>'),
['Вновь встают с земли', 'Опущенные дождем', 'Хризантем цветы.'].join('<br/>'),
['Ты свечу зажег.', 'Словно молнии проблеск,', 'В ладонях возник.'].join('<br/>')
];
}
return '<br>' + placemarkBodies[num % placemarkBodies.length];
}
clusterer.balloon.open(clusterer.getClusters()[0]);
});
Обновлено 13 февраля, 19:52
m.sverdlov,
Здравствуйте. Технические вопросы Вы можете задать на Stack Overflow: https://ru.stackoverflow.com/questions/tagged/yandex-maps-api
ymapsapi,
Добрый день. А вопросы до моего - гуманитарные что ли?
Я полагал, в родном стеке лучше подскажут!
m.sverdlov,
мы перенесли поддержку из Клуба на stack overflow :) 
писали об этом пару месяцев назад.
ymapsapi,
 Понял, спасибо. Задал вопрос там.
Обновлено 14 февраля, 14:23
ymapsapi,
Добрый день. В переполненном стеке тишина(
Может все таки вы подскажите, вопрос то простой: "Как сделать чтобы при клике по элементу балуна (в кластере аккордеон) не отображался подблок с подробностями (clusterBalloonItemContentLayout)?" 
Это скорее всего какому то свойству присвоить false. В документации не вижу, в Dom не могу найти. Или событие какое отлавливать? Я хоть перехватчик на всплытие сделаю или подскажите как от него отписаться?
Заранее благодарю!
m.sverdlov,
здравствуйте! проверьте, что вы выставили тег [yandex-maps-api] или [yandex-maps-jsapi]. без тега ваш вопрос не сможет найти техподдержка.
ymapsapi,
 Добавил. Спс!