Клуб API Карт

Изменять цвет текста в названии иконки (балуна) - РЕШЕНО

Пост в архиве.

Добрый день!

Есть необходимость передавать цвет в название иконки (балуна), т.е. динамически раскрашивать надпись. Текущйи вариант можно увидеть здесь: http://powercomps.ru/yamaps/viv-map.html

Сейчас все надписи красного цвета, а надо в зависимости от значения в таблице БД присваивать каждой точке свой цвет (поле с кодом цвета находится в той же БД, откуда подгружаются данные в YmapsML файл).

Вот код, отвечающий за формирование XML файла:

 

 

<?php

 

header("Content-type: text/xml");

include("bd.php");

 

echo '<ymaps xmlns="http://maps.yandex.ru/ymaps/1.x" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maps.yandex.ru/schemas/ymaps/1.x/ymaps.xsd">

 

<Representation xmlns="http://maps.yandex.ru/representation/1.x">

 

<Style gml:id="objectsStyle">

<iconContentStyle>

<template>#iconTemplate</template>

</iconContentStyle>

 

<balloonContentStyle>

<template>#BalloonStyleTemplate</template>

</balloonContentStyle>

</Style>

 

<Template gml:id="iconTemplate">

<text><![CDATA[<div style="font-size:12px;">

<div style="color:#ff0303;font-weight:bold">$[name]</div>

</div>]]></text>

</Template>

 

<Template gml:id="BalloonStyleTemplate">

<text><![CDATA[

<div style="font-size:12px;">

<div style="color:#ff0303;font-weight:bold">$[name]</div>

<div>Адрес: $[metaDataProperty.AnyMetaData.adres|не задан]</div>

<div>Телефон: $[metaDataProperty.AnyMetaData.telefon|не задан]</div>

<div>Поставщик: $[metaDataProperty.AnyMetaData.prov|не задан]</div>

<div>Комментарий: $[metaDataProperty.AnyMetaData.note|не задан]</div>

</div>]]></text>

</Template>

</Representation>

 

<GeoObjectCollection>

<gml:name>Объекты на карте</gml:name>

<gml:featureMembers>';

 

$query1= "SELECT * FROM maps";

$result1 = mysql_query($query1);

 

while ($par1 = mysql_fetch_array($result1))

{

echo '<GeoObject>';

echo '<gml:name>', htmlspecialchars($par1['name']), '</gml:name>';

echo '<gml:metaDataProperty>';

echo '<AnyMetaData>';

echo '<adres>', $par1['address'], '</adres>';

echo '<telefon>', $par1['phone'], '</telefon>';

echo '<prov>', $par1['provider'], '</prov>';

echo '<note>', $par1['note'], '</note>';

echo '</AnyMetaData>';

echo '</gml:metaDataProperty>';

echo '<gml:Point>';

echo '<gml:pos>', $par1['longitude'], ' ', $par1['latitude'], '</gml:pos>';

echo '</gml:Point>';

echo '</GeoObject>';

 

echo "\n";

}

echo '</gml:featureMembers>

<style>#objectsStyle</style>

</GeoObjectCollection>

 

</ymaps>';

 

?>

 

 

Я предполагаю, что надо как-то динамически формировать строку со стилем iconcontentstyle. Может кто помочь в решении данной проблемы?

9 комментариев
уберите Ваш код под кат, пожалуйста. Редактирование поста->кнопка "врезка"

сделал :)

проще всего положить ваш цвет в данные геообъекта, как поле "adres", например, и выводить его значение в аттрибуте style



нет не имеет. этот тэг просто содержит имя ключа стиля. его трогать не надо.

я говорю про аттрибут style, который отвечает за внешний вид html тэга и содержит css-правилаstyle="color:#$[…];font-weight:bold"

Добавил в раздел строку:

$[name]  // поле tip содержит код цвета

Вроде верно всё, но не цепляется стиль - надписи все по дефолту. Подскажите, люди добрые!

Может он там санитайзится (вырезается)

я уже не помню что там было в первом АПИ (кстати почему ты на втором не пишешь?)

попробуй унести этот стиль в css-класс в css-файл

а в YMapsML его выставлять.

.AnyMetaData.colorsclass]">$[name]

Есть вариант и под второй АПИ: http://powercomps.ru/yamaps/yandexmaps.php

, вот его часть кода:

 

ymaps.ready(function () {
        var map = new ymaps.Map('YMapsID', {
            center: [55.7, 37.5],
            zoom: 9,
            type: 'yandex#map',
            behaviors: ['scrollZoom', 'drag']
        });
        // Необходимо подставить свой URL.
        ymaps.geoXml.load("http://powercomps.ru/yamaps/create_ymapsml.php")
            .then(function (res) {

                // Установка границ карты по размерам содержимого YMapsML-файла.
                var bounds = res.mapState && res.mapState.getBounds();

                bounds && map.setBounds(bounds);

                res.geoObjects.each(function (geoObject) {
                    geoObject.options.set(
     {});
                });
                // Добавление загруженных из YMapsML-файла объектов на карту.
                map.geoObjects.add(res.geoObjects);
            });  
    });

 

А можно подробнее на счет css? Мне ведь необходимо брать цвет из таблицы базы данных и у каждого объекта он будет свой. Как мне тут может помочь css-файл? Или мне его надо будет динамически создавать из того же php файла, который генерит YmapsML?

ну у вас же там будет какой-то конечный набор цветов. создайте css-классы для каждого цвета

Проблему решил! Все же добавил в таблицу поле с кодом цвета (поле называется tip) и подставлял его значение в стиль.

Изменил строку в разделе :

, а ниже в коде, где формируется раздел XML файла, добавил строку:

echo '', $par1['tip'], '';

 

бабушка-бэтмен, большое спасибо за подсказки! :)