Skip to content
YandexMaps2
YandexMaps2
Конструктор Яндекс Карт для любых объектов, работа с mFilter2
  1. Компоненты
  2. YandexMaps2
  3. Кейсы
  4. Точки из MIGX с кастомными иконками на фронт-энде

Точки из MIGX с кастомными иконками на фронт-энде

В этом кейсе мы рассмотрим, какие чудеса можно творить при помощи события плагина ymOnLoadObjects. В данном случае, мы реализуем подгрузку точек из MIGX таблицы с возможностью указания своей иконки для точки.

Шаг 1

Создаём ТВ MIGX ym2objects с такими полями:

Шаг 2

Заполняем в ресурсе это поле, как нам угодно:

Шаг 3

Вызываем карту в нужном месте данного ресурса:

fenom
{'!YandexMaps2' | snippet : [
  'parent' => $_modx->resource.id,
  'class' => 'modDocument',
  'map' => 'ym2map-migx',
]}

Шаг 4

Создаём плагин на событие ymOnLoadObjects:

php
$sp = &$scriptProperties;
switch ($modx->event->name) {
  case 'ymOnLoadObjects':
    if (!in_array($snippetProperties['map'], ['ym2map-migx'])) {
      break;
    }
    if (!$resource = $modx->getObject('modResource', ['id' => (int)$data['parent']])) {
      break;
    }
    if (!$ym2 = $modx->getService('yandexmaps2', 'YandexMaps2', MODX_CORE_PATH . 'components/yandexmaps2/model/yandexmaps2/')) {
      break;
    }
    $ym2->initialize($modx->context->key);

    // Получаем данные из MIGX поля ресурса
    if ($ym2objects = $resource->getTvValue('ym2objects')) {
      $ym2objects = $ym2->tools->isJSON($ym2objects) ? $modx->fromJSON($ym2objects) : $ym2objects;
    }
    $ym2objects = is_array($ym2objects) ? $ym2objects : [];

    //
    $objects = [];
    foreach ($ym2objects as $v) {
      $object = [
        'type' => 'placemark',
        'geometry' => [],
        'options' => [],
        'properties' => [
          'iconContent' => '',
          'iconCaption' => '',
          'balloonContent' => '',
        ],
      ];
      $object['geometry'] = [$v['x'], $v['y']];
      $object['properties']['iconCaption'] = $v['caption'];
      $object['properties']['balloonContent'] = $v['balloon'];
      if (empty($v['icon'])) {
        $object['options'] = [
          'fillOpacity' => 0.5,
          'fillColor' => '#ed4543',
          'strokeOpacity' => 0.9,
          'strokeColor' => '#ed4543',
          'strokeWidth' => 6,
          'iconColor' => '#b3b3b3',
          'preset' => 'islands#icon',
        ];
      } else {
        $object['options'] = [
          'iconLayout' => 'default#image',
          'iconImageHref' => $v['icon'],
          'iconImageSize' => [36, 36],
          'iconImageOffset' => [-18, -36],
        ];
      }
      $object = $ym2->setDefaultValues($object, $snippetProperties);
      $objects[] = $object;
      unset($object);
    }

    $modx->event->returnedValues['objects'] = $objects;
    break;
}

Важно

Чтобы ресурс с картой был обработан плагином, надо единожды сохранить его с подключённой вкладкой YandexMaps2.