xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Заменить иконки объектов на свои изображения (Geofield Yandex Maps)

Опубликовано в

Инструкция по смене иконок объектов на свои изображения:

1. Копируем файл js/geofield_ymap_presets.example.js из папки модуля Geofield Yandex Maps в папку своего модуля или темы.

2. Прописываем в файле список своих пресетов. Пример:

ymaps.ready(function () {
  ymaps.option.presetStorage.add('custom#examplePreset1', {
    iconLayout: 'default#image',
    iconImageHref: 'http://api.yandex.ru/maps/doc/jsapi/2.0/examples/images/myIcon.gif',
    iconImageSize: [30, 42],
    iconImageOffset: [-3, -42]
  });
  ymaps.option.presetStorage.add('custom#examplePreset2', {
    iconLayout: 'default#image',
    iconImageHref: 'http://api.yandex.ru/maps/jsbox/examples/maps/ru/geolocation_api/images/man.png',
    iconImageSize: [27, 26],
    iconImageOffset: [-10, -24]
  });
  // ...
});

3. На странице настроек модуля admin/config/system/geofield-ymap прописываем путь до скопированного файла с пресетами:

4. В виджете, форматтере или представлении прописываем имя пресета:

Если в Views нужны разные пресеты для разных объектов, то добавляем в представление поле с именем пресета и указываем его в настройках стиля:

Демо

Написанное актуально для Geofield Yandex Maps 7.x-1.x
Похожие записи

Комментарии RSS

Есть ли способ использовать относительный путь у изображению? Т.е. делаю плагин, в папку кладу файл с пресетами и рядом картинку. Сейчас пришлось вставить костыль с полным адресом, хотелось бы более красивое решение.

относительно чего?

Относительно папки с модулем. Или js-файла, в котором записан этот пресет.
Если в пресете просто указать "/folder/img.png", то скрипт ссылается на "site.ru/folder/img.png", а мне надо что-то вроде "site.ru/sites/all/modules/mymodule/img.png"

такой возможности нет

Здравствуйте, я не пойму, как сделать разные маркеры во views? Указываю во views в поле "Пресет объектов по умолчанию": custom#examplePreset1,custom#examplePreset2. Но выводится маркер по умолчанию, если указать один пресет, то он выведется, а если два, то нет. А в поле preset field я не знаю, где брать поле с именем пресетов.

поле создать

Какой тип поля нужно создать и что в него написать?

любой, в который можно прописать название пресета

Создал длинное текстовое поле и прописал в значение по умолчанию:
custom#examplePreset1
custom#examplePreset2
После указал в "Поле с пресетом" созданное поле и опять ничего. Не могли бы вы подробнее расписать этот момент, как правильно нужно это сделать?

1. добавить сущности поле
2. прописать у сущностей название пресета
3. добавить поле в views
4. указать поле в настройках

добавить сущности поле

Это значит добавить поле к типу материала?

добавить поле тому, что вы выводите на карте

Привет. Я пока не тестил модуль. Скажи, можно сделать, чтобы у нод из разных терминов выводились свои метки?

можно

Добрый день. А возможно ли сменить иконку у кластера?

наблюдается косячок. Если сайт мультиязычный, то он ищет картинку по адресу с префиксом языка, например не sites/all/themes/bla/images/bla.png , а ru/sites/all/themes/bla/images/bla.png и собственно не находит.

Как можно побороть?

указывайте абсолютные пути

указывайте абсолютные пути

не очень удобно, но покатит! Спасибо Вам.

xandeadx, подскажите пожалуйста. Как настроить модуль, чтобы ноды с разными терминами показывали разные значки? Что нужно добавить в поле пресет?

в Preset field укажите поле с именем пресета

xandeadx, у меня есть тип материала. В нём есть ссылка на словарь терминов. Есть 10 нод данного материала. Допустим я добавляю в тип материала текстовое поле с название "Пресет", и задаю ему значение custom#examplePreset2 из js файла с описанием пресетов. В форматере Views я выбираю созданное поле "Пресет". Как это поможет отображать ноды разными флажками в зависимости от термина? (простите за непонятливость, но сижу уже целый день).

поле указанное в Preset field должно выводить имя пресета для текущего маркера

xandeadx, все понял. Получилось. Огромное спасибо.

Здравствуйте! Сделал все, как вы говорили, все работает, спасибо большое за информацию! Но возник такой небольшой вопрос. Я создал поле с пресетом в типе материала. В views все работате, показывает разными цветами. Но когда я добавляю тип материала, указываю пресет, он показывается всегда со стандартным пресетом. Возможно ли сделать так, чтобы и в типе материала объекты были разного цвета?

В модуле косяк с полем для пресета в том, что в селектах используется не ключ (value), а текстовое значение… Т.е. хрен потом используешь это поле для фильтров, например…

Доброго времени суток!
У меня возник вопрос: возможно ли в одном пресете указать настройки и для полигона и для иконки? Я попробовал вот так:

ymaps.option.presetStorage.add('custom#selhoz_djiloi', {
    fillColor: '#ffff0066',
    strokeColor: '#ff000099',
    strokeWidth: 2,
    iconImageHref: '/sites/all/modules/geofield_ymap/images/icon-red.png',
    iconImageSize: [10, 16],
    iconImageOffset: [-3, -16]
  });

Для полигона настройки отображения применяются, а для иконки нет. Можете подсказать, где я ошибся?

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании