Шаблоны
Шаблоны позволяют сформировать произвольное HTML-представление геообъектов, балунов и хинтов. Например, если для отображения метки требуется использовать не только изображение с тенью, но и текст, необходимо сконструировать соответствующий его шаблон и задействовать его в стиле, использующемся для отображения метки.
Для определения шаблона используется элемент repr:Template, внутри которого в контейнере repr:text размещается HTML-код (тело шаблона).
<repr:Template gml:id="hintTemplate">
<repr:text><div style="color:blue">Подсказка</div></repr:text>
</repr:Template>
В ряде случаев стиль не позволяет изменить отображения внешнего вида объекта никаким другим образом, кроме использования шаблона (см. например, repr:balloonContentStyle).
Шаблон является составной частью стиля, на который ссылается географический объект или коллекция.
При использовании шаблона доступ к значению любого XML-элемента, находящегося внутри элемента ymaps:GeoObject или ymaps:GeoObjectCollection осуществляется с помощью обращения к соответствующей переменной.
Для определения переменных используются строки вида $[имя_переменной|значение_по_умолчанию]
.
Имя переменной представляет собой местоположение этого XML-элемента внутри элемента, к которому применяется стиль. Местоположение задаётся последовательным перечислением названий всех родительских элементов и названия самого элемента, в качестве разделителя используется точка.
Допустим, описание географического объекта выглядит следующим образом:
<GeoObject>
<gml:name>Офис Яндекса на улице Льва Толстого</gml:name>
<gml:metaDataProperty>
<AnyMetaData>
<address>119021, Москва, ул. Льва Толстого, 16</address>
<phone>+7 495 739-70-00</phone>
<fax>+7 495 739-70-70</fax>
</AnyMetaData>
</gml:metaDataProperty>
<gml:Point>
<gml:pos>37.58828 55.733913</gml:pos>
</gml:Point>
</GeoObject>
Тогда шаблон балуна, отображающего название объекта, адрес и телефон офиса, может выглядеть следующим образом.
<Template gml:id="balloonTemplate">
<text>
<div style="font-size:12px;">
<div style="color:#ff0303;font-weight:bold">$[name]</div>
<div>Адрес: $[metaDataProperty.AnyMetaData.address]</div>
<div>Телефон: $[metaDataProperty.AnyMetaData.phone|не указан]</div>
<text>
</Template>
Если не задать телефон офиса (т. е. удалить из приведённого примера элемент phone), то вместо номера телефона будет отображена строка «не указан».
Существует несколько правил, ограничивающих использование в тексте шаблона некоторых HTML-элементов и атрибутов. Список ограничений приведён в следующей таблице.
Ограничения на использование HTML в шаблонах
Игнорируются элементы script и iframe |
Элементы script и iframe удаляются вместе с их содержимым. Пример:
заменяется на
|
Игнорируются атрибуты, отвечающие за вызов обработчиков событий |
Атрибуты, отвечающие за вызов обработчиков событий (onclick, onchange, onkeypress и т. д.), удаляются из элементов вместе со своим содержимым. Пример:
заменяется на
|
Игнорируется атрибут class |
Атрибут class удаляется из элементов вместе со своим содержимым. Пример:
заменяется на
|
В URL ссылки атрибута href должна быть указана схема; схема javascript игнорируется |
Атрибут href удаляется вместе со своим содержимым, если в URL ссылки не указана схема (протокол) или используется схема javascript. Пример:
заменяется на
|
Игнорируется свойство position:absolute атрибута style |
Если атрибут style содержит свойство position:absoute, данное свойство удаляется. Пример:
заменяется на
|
Игнорируются CSS expressions |
Если атрибут style содержит CSS expressions (поддерживаются только браузерами Internet Explorer до версии 8), он удаляется вместе со своим содержимым |