Mapex2 - Яндекс.Карты с редактором на вашем сайте
Многим знакомо дополнение mapex для работы с яндекс.картами www.createit.ru/blog/modx/2012/mapex-2-0-yandex-maps-for-modx-revolution/, оно было создано еще в 2012 году и тех пор оставалось практически в таком же виде.
Некоторое время назад я принял решение о его дальнейшем развитии, в связи с чем значительно переписал, выложил исходники на github, написал документацию. Ну и раз пошла такая пьянка =), что в последнее время появилось много интересующихся этой темой, я себя поторопил и решил все выложить.
Я планирую сделать этот компонент платным с небольшой ценой, выложив на modstore.pro/, чтобы оставалась мотивация для его развития.
Если вы считаете, что платить тут не за что — исходники открыты. Кроме того, в сети без проблем можно найти пакет с прошлой версией компонента, который тоже более чем работоспособен.
По идее должно быть все совместимо, так как формат хранения данных я не менял, но бекап все равно обязателен (!). Хотя если у вас стоит прошлая версия mapex2 и она вас устраивает — может вам и не нужно обновляться?
Компонент доступен в магазине ModStore modstore.pro/packages/maps/mapex2
Документация доступна здесь: docs.modx.pro/components/mapex2
Компонент добавляет в MODx новый тип поля ввода — Яндекс.Карта (mapex.yandexMap)

1. Точки. Произвольное количество точек, для каждой задается Текст, Цвет (из предустановленных в Яндекс.Картах), Текст балуна
2. Линии. Произвольное количество линий, для каждой задается Цвет линии, Ширина линии, Прозрачность, Текст балуна
3. Многоугольник. Произвольное количество многоугольников, для каждого задается Цвет границы, Цвет заливки, Ширина линии, Прозрачность, Текст балуна
3. Маршрут. Можно добавить прокладку на карту маршрута (одного) между двумя точками.
Для каждой карты запоминаются ее настройки: тип карты (схема, спутник, гибрид, народная карта, народная + спутник), координаты центра карты, масштаб карты. Все это позволяет отобразить карту на сайте точно также, как она выглядит в административном интерфейсе.
В админке реализован поиск объектов на карте по адресу или названию.
Поддерживается добавление нескольких карт к одному ресурсу, путем создания нескольких TV полей.
Параметры сниппета (через | даны значения по-умолчанию):
mapexMap21 — рисует карту во фронтенде, используя API Яндекс.Карт версии 2.1.
Параметры сниппета практически идентичны, в таблице даны только лишь отличия:
Компонент для своей работы требует библиотеку jquery. В настройках можно указать, откуда загружать ее. Если у вас в админке вдруг есть еще какой либо компонент, использующий jquery, то могут быть проблемы из-за подключения jquery 2 раза, в этом случае просто очистите настройку mapex2_manager_jquery_url.
Во фронтенде реализованна поддержка API Яндекс.Карт как версии 2.0 (сниппет mapexMap), так и 2.1 (сниппет mapexMap21).
Единственный нюанс — в версии API 2.1 поддерживаются мультимаршруты, но из-за работы административного интерфейса на младшей версии API, данная возможность в компоненте не используется.
Некоторое время назад я принял решение о его дальнейшем развитии, в связи с чем значительно переписал, выложил исходники на github, написал документацию. Ну и раз пошла такая пьянка =), что в последнее время появилось много интересующихся этой темой, я себя поторопил и решил все выложить.
Платно или бесплатно?
Я планирую сделать этот компонент платным с небольшой ценой, выложив на modstore.pro/, чтобы оставалась мотивация для его развития.
Если вы считаете, что платить тут не за что — исходники открыты. Кроме того, в сети без проблем можно найти пакет с прошлой версией компонента, который тоже более чем работоспособен.
Совместимость с прошлой версией
По идее должно быть все совместимо, так как формат хранения данных я не менял, но бекап все равно обязателен (!). Хотя если у вас стоит прошлая версия mapex2 и она вас устраивает — может вам и не нужно обновляться?
Где скачать?
Компонент доступен в магазине ModStore modstore.pro/packages/maps/mapex2
Документация доступна здесь: docs.modx.pro/components/mapex2
Документация
Компонент добавляет в MODx новый тип поля ввода — Яндекс.Карта (mapex.yandexMap)

Возможности
Компонент позволяет рисовать на этой карте следующие объекты:1. Точки. Произвольное количество точек, для каждой задается Текст, Цвет (из предустановленных в Яндекс.Картах), Текст балуна
2. Линии. Произвольное количество линий, для каждой задается Цвет линии, Ширина линии, Прозрачность, Текст балуна
3. Многоугольник. Произвольное количество многоугольников, для каждого задается Цвет границы, Цвет заливки, Ширина линии, Прозрачность, Текст балуна
3. Маршрут. Можно добавить прокладку на карту маршрута (одного) между двумя точками.
Для каждой карты запоминаются ее настройки: тип карты (схема, спутник, гибрид, народная карта, народная + спутник), координаты центра карты, масштаб карты. Все это позволяет отобразить карту на сайте точно также, как она выглядит в административном интерфейсе.
В админке реализован поиск объектов на карте по адресу или названию.
Поддерживается добавление нескольких карт к одному ресурсу, путем создания нескольких TV полей.
Демонстрация работы
Ребята из OpenModx записали видео с демонтрацией, 13 минут, зато все подробно описано:Сниппеты
mapexMap — рисует карту во фронтенде, используя API Яндекс.Карт версии 2.0.Параметры сниппета (через | даны значения по-умолчанию):
&tvName — Имя TV параметра с картой. Используйте совместно с параметром &resource
&resource | текущий ресурс — Id ресурса с картой. Используйте совместно с параметром &tvName
&map — json строка с картой. Альтернативный способ указать, какую карту рисовать. Если этот параметр указан, то &tvName и &resource не используются. Пример вызова: [[mapexMap? &map=`[[*tvMap]]`]]
&mapId | mapexMap — Id карты. Используется при генерации javascript. Если на одной странице карт несколько — укажите разные mapId
&width | 500px — Ширина карты, например 500px или 100%. Обязательно укажите единицы измерения.
&height | 400px — Высота карты
&containerCssClass — Можно указать css класс блока, в который обернута карта
&mapTpl | mapex.Map.Tpl — Основной чанк для вывода карты
&placemarkTpl | mapex.Placemark.Tpl — Чанк для вывода точки
&polygonTpl | mapex.Polygon.Tpl — Чанк для вывода многоугольника
&polylineTpl | mapex.Polyline.Tpl — Чанк для вывода линии
&routeTpl | mapex.Route.Tpl — Чанк для вывода маршрута
&controls | mapTools,typeSelector,zoomControl,searchControl,miniMap,trafficControl,scaleLine | Набор элементов управления, которые будут на карте. См. tech.yandex.ru/maps/doc/jsapi/2.0/dg/concepts/controls-docpage/
&includeJS | 1 — Подключать или нет на страницу скрипт Яндекс.Карт
mapexMap21 — рисует карту во фронтенде, используя API Яндекс.Карт версии 2.1.
Параметры сниппета практически идентичны, в таблице даны только лишь отличия:
&mapTpl | mapex.Map21.Tpl — Основной чанк для вывода карты
&placemarkTpl | mapex.Placemark21.Tpl — Чанк для вывода точки
&polygonTpl | mapex.Polygon21.Tpl — Чанк для вывода многоугольника
&polylineTpl | mapex.Polyline21.Tpl — Чанк для вывода линии
&routeTpl | mapex.Route21.Tpl — Чанк для вывода маршрута
&controls | default — Набор элементов управления, которые будут на карте. См. tech.yandex.ru/maps/doc/jsapi/2.1/dg/concepts/controls-docpage/
Настройки компонента
В настройках компонента (см. Настройки системы, пространство mapex2) можно задать начальное положение, масштаб и тип карты в административном интерфейсе, а также скрыть или показать служебное поле, в котором хранится состояние карты в json формате.Компонент для своей работы требует библиотеку jquery. В настройках можно указать, откуда загружать ее. Если у вас в админке вдруг есть еще какой либо компонент, использующий jquery, то могут быть проблемы из-за подключения jquery 2 раза, в этом случае просто очистите настройку mapex2_manager_jquery_url.
Поддержка API Яндекс.Карт
Административный интерфейс компонента использует API Яндекс.Карт версии 2.0. К сожалению, на текущий момент перевести его на корректную работу с более свежим API 2.1 не удалось, так как многое в API было изменено.Во фронтенде реализованна поддержка API Яндекс.Карт как версии 2.0 (сниппет mapexMap), так и 2.1 (сниппет mapexMap21).
Единственный нюанс — в версии API 2.1 поддерживаются мультимаршруты, но из-за работы административного интерфейса на младшей версии API, данная возможность в компоненте не используется.
Комментарии: 102
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
вроде как даже бесплатный с сегодняшнего дня
Вот вам скриншот с рабочего проекта
Вот бы ещё такое решение для гугл-карт, т.к. есть места, где гугл в разы лучше детализует карту чем яндекс…
Вот скрин
Может при сборке пакета из репозитория что-то потерялось? Попробуйте ошибки поглубже поискать… jquery подключился? Все файлы, требуемые дополнением загрузились?
Нет ли у кого примеров кастомного placemark, чтобы на фоне надписи картинка была, или даже разные картинки по hover-у?
А по теме вопроса в песочнице много примеров tech.yandex.ru/maps/jsbox/2.1/icon_customImage, только версии АПИ не путайте
Тоже есть необходимость приобрести данное дополнение. Вопрос в следующем: сейчас разработка идет на поддомене хостера, так вот если приобрести сейчас (чтобы все протестировать и настроить), затем при переводе на основной домен дополнение продолжит работу или нет? Не могу найти толкового описания этого момента на modstore ^)
Да, можно 1 раз самостоятельно поменять домен сайта, этот момент описан, вы просто не нашли modstore.pro/info/faq/, пункт 3.2
Ответил в поддержке компонента вам полчаса назад, мысль покоя мне не дала эта, в итоге сел и написал 10 строчек кода =)
В общем выпустил версию
при включении настройки после поиска будет автоматически на карту добавляться точка!
Ждем, когда пакет обновят в репозитории.
Так что если только со временем.
Если вам нужны мультимаршруты — сейчас могу посоветовать добавлять их на фронтенд вручную, код довольно простой:
а координаты для маршрутов можно, к примеру, через migx забивать.
Большим сейчас, к сожалению, помочь не могу.
Спасибо!
указывается в api-maps.yandex.ru/2.0/?load=package.full&lang=ru-RU:8
y @ ?load=package.full&lang=ru-RU:8
d.ready @ ?load=package.full&lang=ru-RU:8
Но она появляется даже без нажатия на кнопку.
Раздвоения карт нет, когда просто нажимаешь на пустую область сайта. Т.е. функция рисования карты вызывается два раза при нажатии на кнопку.
Версия 2.0.1
1. Ставить метку на карте,
2. Определять координаты и географическое название метки (страна, регион, город),
3. Сохранять в базу полученные данные?
Далее, возможно ли на другой карте выводить:
1. Кластеры меток с объединением и разделением по мере масшатибирования,
2. По на основе кликов прокладывать маршруты?
Прям с помощью компонента такое не получится сделать, наверное здесь проще все создать с нуля, используя ZPI Яндекс.Карт. По-сути компонент вам здесь вообще не нужен…
В принципе задача «поставить точку» — простая, проложить маршрут — тоже довольно простая. Кластеры — просто.
Поизучайте песочницу tech.yandex.ru/maps/jsbox/2.1/
По теме: да, именно такую карту нарисовать в Mapex2 можно.
Например я указываю у 1 ресурса его местоположения, у 2 го так-же и на главной странице вывожу все объекты на карте. При нажатие на точку он мне показывает название, фото и ссылку на объект. Можно так сделать? Если нет то цена вопроса такой доработки какова? Думаю для многих это будет интересно.
Из коробки — нет. Я делал это на одном из сайтов, но все совсем не просто, нужно много работы. Суть сводилась к тому, что я подключал js скрипты, отвечающие за работу с API яндекс карта, к странице, а всю остальную обвязку (html разметку, обработку данных) писал заново для фронтэнда.
Ок, спасибо, буду копать…
2. Для сайтов с объявлениями по недвижимости можно было бы также ставить отметки где находится объект
3. Для сайтов ЖКХ, где есть обратная связь от жильцов в пользу управляющей компании можно было бы также ставить отметки на карте, где именно проблема, требующая внимания
4. В современных сайтах-сообществах, например любителей тренировок на открытом воздухе или фотографов, можно было бы дать возможность пользователям добавлять места тренировок/красивых мест для съемок…
В общем везде, где web 2.0 (контент, добавляемый пользователями), эти современные фишки в виде установки отметок на карте были бы очень уместны. Как пример другой фишки: прикрепление файлов (банально, но если drag&drop, то уже классно современно)
То есть человек в поле вводит адрес с автодополнением и карта сразу же определяет место и предлагает его (подставляет нужные координаты).
Дело в том, что подключение jquery и api yandex карт банально тормозит админку, хоть и из CDN грузится.
Типа такого
Так не работает
Он вроде как не работал, значение не учитывалось.
Прошу уточнения. На моих сайтах не припомню такой проблемы.
Скажем, есть 10 ресурсов и у каждого задан свой многоугольник в карте, могу ли я сделать общую страницу с картой, где будет вывод всех этих многоугольников ресурсов?
принцип (я дергаю код с одного из проектов):
1. создаете 1 карту, видимо вручную, используя API яндекса, на ней вызываете pdoResources с выборкой нужных ресурсов.
2. В чанке many.Row.Tpl — вызов сниппета mapex2, но нужно заменить чанк карты на свой, где собственно убрать создание еще одной карты, а оставить только вывод объектов :)
чанк many.Row.Tpl.Map:
А вот уже возможность поставить метку, введя в поиск адрес — есть, но это в админке.
1
Возможно ли отключить возможность добавлять определенные типы меток, к примеру оставить только точки?
т.е. так — http://prntscr.com/fbwo0x
2 Возможно ли ограничить кол-во добавляемых меток?
К примеру можно поставить только одну.
Если вам нужно просто ставить 1 метку, то вы можете:
1. попробовать поставить пакет отсюда, но я не проверял его работоспособность в свежих версиях MODX. Эта версия как раз только что и умеет, что ставить 1 точку на карту.
2. Поискать другое решение, mapex2 предназначен все же для отрисовки админом сложных карт
По существу вопроса все же:
1. наверное можно, но правкой исходников… сейчас даже затрудняюсь сказать как
2. наверное можно, тоже правкой, но этот вопрос еще посложнее…
У меня на некоторых ресурсах планируется до 20 меток. Под каждую метку нужно делать отдельное TV?
поставил, всё работает вроде и бесплатно, правда в репозитарии уже не найдешь.
Вот описание, что да как … ТЫК....
Сейчас объясню поподробнее.
1) так создаётся карта.
2) показывается она если на странице с логотипами контор, и если нажать на какой-то то во всплывающем окне выводится карта
3) код вывода такой:
Выводится только последняя ((( а всё что перед ней не хочет отображаться.
1. На странице «Контакты» сделал карту с 5 метками (это филиалы, находятся в разных городах, соответственно в нужном мне масштабе видна только последняя метка — типа Центральный офис)
2. На этой же странице у меня размещена контактная информация всех этих филиалов.
Вопрос: можно ли добавить в контактные данные филиалов ссылки типа «Смотреть на карте» — что бы при нажатии на которые, происходила «прокрутка» карты к нужной метке?
Вами нужны методы panTo, setCenter из апи карт.
Есть много разных примеров в песочнице: tech.yandex.ru/maps/jsbox/2.1?from=jsapi
то работать не будет, потому что он не понимает что такое mapexMap, так?.. нужно где-то в модуле прописывать?
В личку скинь сайт, гляну.
При создании карты, ниже генерируется строчка:
В которой нет пробелов после фигурной скобки, как только эти пробелы ставишь в ручную, то страница с картой на сайте отображается.
Как это исправить, чтобы пробелы ставились автоматом?
на
Подскажите пожалуйста: на сайте использовался компонент mapex, в какой-то момент в админке (в редакторе страницы) он перестал нормально функционировать, т.е. не отображается карта и прочие штуки, только строка с кодом json для вставки на сайт…
Если купить и установить Ваш компонент mapex2 — все восстановится в админке? (просто я смотрю, он тоже уже не очень «свежий»)
mapex и mapex2 разные компоненты!
Просто mapex должен работать, смотрите ошибки в консоли сайта, возможно что Яндекс.Карты затребовали обязательный ключ для доступа к API.
… а старый mapex — да, не него ругается консоль, типа:
Uncaught ReferenceError: ymaps is not defined
at mapex.init.js:6
at ext-all.js:21
at b (ext-all.js:21)
… и т.д… Мне кажется проще новый установить)
А ключ верно, нужно получить.
Заранее спасибо!
В чанке выода карты, перед последними скобками можно добавить дополнительную логику, например отключение скрола: