У 2ГИС есть виджет карт для сайта (https://widgets.2gis.com/firmsconstructor/project/32), а есть конструктор карт, где можно создавать маркеры и делать много чего ещё (https://makemap.2gis.ru/). Речь пойдёт именно о конструкторе, я сделал в нём карту и получил следующий код для встраивания:
Вставляю этот код через текстовое поле формата FullHtml при создании материала - в итоге карта не работает. В консоли только предупреждение: An iframe which has both allow-scripts and allow-same-origin for its sandbox attribute can remove its sandboxing.
Пробовал следующее:
1) Вставлял напрямую в шаблон tpl.php - результат тот же.
2) Ставил модуль Security Kit и давал разрешение на фреймы - не помогает.
3) Подключал JS 2GIS api (хотя в документации об этом не сказано) - не помогает.
4) Попробовал вставить код виджета на сторонний проект, где используется чистый html шаблон без движка - карта работает.
Подозреваю, что скрипт, который генерирует виджет, нужно как-то оборачивать в Drupal.behaviors (часть с (function(e,t)), вероятнее всего дело в этом. Я пробовал разные вариант, но у меня не заработало.
Подскажите как правильно сделать? У кого есть опыт интеграции таких карт в материал?
- Блог
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Комментарии
FullHTML у вас скорее всего все-равно имеет фильтрацию/редактор. Создайте отдельный формат текста вообще без фильтров, только дайте к нему доступ исключительно админам, так как иначе все желающие смогут встраивать произвольный код в страницы. (Ради эксперимента вставил вашу карту и она без проблем работает)
По поводу CORS, есть одноименный модуль, либо оно настраивается на уровне веб сервера.
Чтобы исключить фильтрацию через формат текста - вставлял напрямую в шаблон
Поставил модуль CORS с доступом "*|*" - не сработало
Проверьте, что скрипт вставляется целиком и не портится форматированием. Если бы у вас была проблема с CORS, в консоли была бы ошибка и блокировка скрипта, а не предупреждение.
Проверил, не портится форматированием. В итоге получаю пустую обёртку. Написал в техподдержку 2gis, возможно они помогут.
У вас в каком виде получилось вывести эту карту в Drupal 7? Используйте последнюю версию ядра?
Я проверял на друпале 6, 7 и 9, все последних версий. Код вставлялся в материал типа Страница текстовым фильтром "Без форматирования". Карта ваша подгружалась с катком каким-то в центре.
Все верно - там добавлен один маркер с катком. Спасибо за обратную связь - это поможет найти причину)
В ходе детального тестирования выяснилось, что скрипт не успевает сработать из-за библиотеки Simplebar (https://grsmto.github.io/simplebar/), которую мы используем для настройки нестандартного скроллинга на всем сайте. Для этого сразу после body мы оборачиваем контент в div с классом "scrollWrapper", который и инициализирует скрипт.
Почему так происходит - вопрос к 2GIS. Яндекс и Гугл исправно работают.
Решили котсылём:
1) Делаем два поля в админ панели: код iframe (activity_map_iframe) и код js (activity_map_js) для карты
2) Создаём материал и вставляем код из конструктора 2GIS в соответствующие поля, убираем обёртку скроптов (тег scripts)
3) В коде выводим эти поля и делаем небольшую задержку в срабатывании JS:
<?php
$activity_map_js = field_view_field('node', $node, "field_activity_map_js", array('label' => 'hidden'));
$activity_map_iframe = field_view_field('node', $node, "field_activity_map_iframe", array('label' => 'hidden'));
<?php if (!empty($activity_map_iframe)): ?>
<?php echo render($activity_map_iframe); ?>
<?php endif ?>
<?php if (!empty($activity_map_js)): ?>
<script type="text/javascript">
(function ($) {
Drupal.behaviors.GisMapInit = {
attach : function(context, settings) {
setTimeout(() => {
<?php echo render($activity_map_js); ?>
}, 5000)
}
};
})(jQuery);
</script>
<?php endif ?>
Также не забываем создать шаблон для полей с названием:
field--field_activity_map_iframe.tpl.php
field--field_activity_map_js.tpl.php
Внутри которых оставляем только:
<?php foreach ($items as $delta => $item): ?><?php print render($item); ?>
<?php endforeach; ?>
Это избавит от лишней обёртки, которая поломает код.
Дополню ветку по этой проблеме:
Проблему работы 2GIS с библиотекой Simplebar удалось повторить без использования Drupal. Если карту вставлять внутри DIV, который использует библиотеку, она не отображается: https://codepen.io/denton444/pen/rNZZmoY
Обратная связь от разработчиков: «Разработчики проверили Ваш код. К сожалению, мы не можем гарантировать совместимость нашего кода карты со сторонними библиотеками. Применяемое Вами в текущий момент времени решение - единственный вариант устранить данную проблему.» (тикет JIRA SUPPORT-831645)
Поэтому используйте Google или Яндекс. Если принципиально необходим 2GIS - используйте код выше, в качестве времени задержки можно ставить "0" - тогда карта все ровно сработает, даже на медленном интернете 3G.