---
metadata:
  - name: generator
    content: Diplodoc Platform v5.39.1
alternate:
  - https://yandex.com/dev/jsapi-v2-1/doc/en/v2-1/examples/cases/cluster_balloon_accordion.md
  - https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/examples/cases/cluster_balloon_accordion.md
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.com/dev/jsapi-v2-1/doc/ru/llms.txt

# Макет балуна кластера "Аккордеон"

<iframe id="LIVE-EXAMPLE" style="width:100%;height: 400px;border-radius: 8px;border: 1px solid rgba(92, 94, 102, 0.14);" frameBorder="0" src="https://yastatic.net/s3/front-maps-static/maps-front-jsapi-v2-1/examples/2/out/s3-cases/ru/cluster_balloon_accordion/index.html" allow="fullscreen"></iframe>

<a target="_blank" rel="noopener noreferrer" style="display: inline-block;margin-top: 10px;cursor: pointer;border-radius: 4px;padding: 9px 12px;background: #151515;color: white;text-decoration: none;font-weight: 500" href="https://codesandbox.io/p/sandbox/rrh7xq?file=index.html">Open in CodeSandbox</a>

<div id="references">
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/ready">ready</a>, <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/Map">Map</a>,
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/Clusterer">Clusterer</a>, <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/ClusterPlacemark">ClusterPlacemark</a>, <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/templateLayoutFactory">templateLayoutFactory</a>,
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/Placemark">Placemark</a>
</div>
    В примере используется макет балуна кластера "cluster#balloonAccordion".<br/>
    В макете выводится список геообъектов, а после клика по элементу происходит отображение информации о геообъекте.<br/>
    Информация о выбранном геообъекте задается отдельным макетом
    и может быть настроена при помощи опции 'clusterBalloonItemContentLayout'.<br/>
    В данном примере задается собственный макет с информацией о геообъекте.<br/>
<br/>
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/dg/concepts/layouts">Макеты</a>
    объектов можно создавать с помощью фабрики <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/templateLayoutFactory">templateLayoutFactory</a>,
    используя текстовые шаблоны. <br/>
    Текстовые шаблоны формируют html-содержимое макета на основе хэша с данными,
    передаваемого в конструктор макета. <br/>
    В данном примере поставщик данных - это геообъект.

{% list tabs %}

-   index.html

    ```html
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
        <html>
            <head>
                <title>Макет балуна кластера "Аккордеон"</title>
                <meta
                    http-equiv="Content-Type"
                    content="text/html; charset=UTF-8"
                />
                <!--
            Укажите свой API-ключ. Тестовый ключ НЕ БУДЕТ работать на других сайтах.
            Получить ключ можно в Кабинете разработчика: https://developer.tech.yandex.ru/keys/
        -->
                
                
                
            </head>
            <body>
                <div id="map"></div>
            </body>
        </html>
    </html>
    ```

-   cluster_balloon_accordion.js

    ```js
    ymaps.ready(function () {
        var mapCenter = [55.755381, 37.619044],
            map = new ymaps.Map("map", {
                center: mapCenter,
                zoom: 9,
                controls: [],
            }),
            // Возможные значения цветов иконок.
            placemarkColors = [
                "#FF1F1F",
                "#1F44FF",
                "#1FFF8E",
                "#FF1FF5",
                "#FFEF1F",
                "#FF931F",
                "#AE6961",
                "#6193AE",
            ];

        // Создаем собственный макет с информацией о выбранном геообъекте.
        var customItemContentLayout = ymaps.templateLayoutFactory.createClass(
            // Флаг "raw" означает, что данные вставляют "как есть" без экранирования html.
            "<h2 class=ballon_header>{{ properties.balloonContentHeader|raw }}</h2>" +
                "<div class=ballon_body>{{ properties.balloonContentBody|raw }}</div>" +
                "<div class=ballon_footer>{{ properties.balloonContentFooter|raw }}</div>"
        );

        var clusterer = new ymaps.Clusterer({
            clusterDisableClickZoom: true,
            clusterOpenBalloonOnClick: true,
            // Устанавливаем стандартный макет балуна кластера "Аккордеон".
            clusterBalloonContentLayout: "cluster#balloonAccordion",
            // Устанавливаем собственный макет.
            clusterBalloonItemContentLayout: customItemContentLayout,
            // Устанавливаем режим открытия балуна.
            // В данном примере балун никогда не будет открываться в режиме панели.
            clusterBalloonPanelMaxMapArea: 0,
            // Устанавливаем размеры макета контента балуна (в пикселях).
            clusterBalloonContentLayoutWidth: 250,
            clusterBalloonContentLayoutHeight: 200,
            // Можно отключить отображение иконок геообъектов в списке.
            // В браузере Internet Explorer ниже 9й версии иконки никогда не будут отображаться.
            // clusterBalloonAccordionShowIcons: false
        });

        // Заполняем кластер геообъектами со случайными позициями.
        var placemarks = [];
        for (var i = 0, l = 100; i < l; i++) {
            var placemark = new ymaps.Placemark(
                getRandomPosition(),
                {
                    // Устаналиваем данные, которые будут отображаться в балуне.
                    balloonContentHeader: "Метка №" + (i + 1),
                    balloonContentBody: getContentBody(i),
                    balloonContentFooter: "Мацуо Басё",
                },
                {
                    iconColor: getRandomColor(),
                }
            );
            placemarks.push(placemark);
        }

        clusterer.add(placemarks);
        map.geoObjects.add(clusterer);

        function getRandomPosition() {
            return [
                mapCenter[0] + (Math.random() * 0.6 - 0.3),
                mapCenter[1] + (Math.random() * 0.8 - 0.4),
            ];
        }

        function getRandomColor() {
            return placemarkColors[
                Math.round(Math.random() * placemarkColors.length)
            ];
        }

        var placemarkBodies;
        function getContentBody(num) {
            if (!placemarkBodies) {
                placemarkBodies = [
                    [
                        "Снег согнул бамбук,",
                        "Словно мир вокруг него",
                        "Перевернулся.",
                    ].join("<br/>"),
                    [
                        "Пустое гнездо.",
                        "Так и покинутый дом -",
                        "Выехал сосед.",
                    ].join("<br/>"),
                    [
                        "В жару крестьянин",
                        "Прилег на цветы вьюнка.",
                        "Так же прост наш мир.",
                    ].join("<br/>"),
                ];
            }
            return (
                "<strong>Тело метки №" +
                (num + 1) +
                "</strong><br/>" +
                placemarkBodies[num % placemarkBodies.length]
            );
        }
        clusterer.balloon.open(clusterer.getClusters()[0]);
    });
    ```

{% endlist %}
