AWZ: Решение конфликтов Яндекс карт [awz.ymapfix] - модуль для CMS Битрикс

GitHub - https://github.com/azahalski/awz.ymapfix/

Маркетплейс 1с-Битрикс:
https://marketplace.1c-bitrix.ru/solutions/awz.ymapfix/

Назначение

Модуль автоматически заменяет подключения к API Яндекс карт на заданный URL, обеспечивая единый и корректный способ подключения библиотеки ymaps. Это особенно полезно в ситуациях, когда несколько модулей (например, awz.ydelivery, awz.belpost, awz.europost) подключают карты с разными ключами и версиями, что приводит к конфликтам и ошибкам.

Основные возможности

  • Автоматическая замена скриптов: Модуль перехватывает HTML-контент страницы и заменяет все подключения к api-maps.yandex.ru на единый URL, указанный в настройках.
  • Гибкая настройка: Возможность включать/отключать модуль на отдельных сайтах (для мультисайтовых решений).
  • Исключения по URL: Настройка страниц, на которых модуль не будет работать, с использованием регулярных выражений.
  • Исключения по GET-параметрам: Отключение модуля на страницах с определёнными GET-параметрами.
  • Автоматический поиск ключей: При наличии модулей awz.ydelivery, awz.belpost, awz.europost или fileman, модуль пытается автоматически подставить API-ключи из их настроек.
  • Поддержка enterprise-версии: При наличии API-ключа для enterprise-версии, модуль автоматически переключается на enterprise.api-maps.yandex.ru.

Принцип работы

Модуль подключается к событию OnEndBufferContent ядра Bitrix. На этапе завершения формирования HTML-страницы он:

  1. Проверяет, что запрос не из админки, не POST-запрос и не AJAX-запрос.
  2. Получает настройки для текущего сайта (в мультисайтовых проектах).
  3. Проверяет, не отключён ли модуль для текущего GET-параметра или URL (через регулярные выражения).
  4. Ищет в HTML-коде все теги <script> с подключением api-maps.yandex.ru.
  5. Заменяет первое найденное подключение на указанный в настройках URL (с добавлением #awzfixymap для последующей очистки).
  6. Удаляет все остальные подключения к Яндекс Картам.
  7. Удаляет метку #awzfixymap из итогового HTML.

Интеграция с Bitrix CMS

  • Установка: Модуль регистрируется в системе и подключает обработчик события OnEndBufferContent.
  • Настройки: Доступны через раздел "Настройки модулей" → "Настройки модуля AWZ: Решение конфликтов Яндекс карт".
  • Мультисайтовость: Настройки хранятся отдельно для каждого сайта (SITE_ID), что позволяет гибко управлять поведением модуля в мультисайтовых проектах.

Настройки и конфигурация

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

  1. Включить модуль (ACTIVE)

    • Флажок для включения/отключения модуля на текущем сайте.
    • Значение по умолчанию: N (выключено).
  2. URL путь к библиотеке ymaps (URL)

    • Полный URL для подключения библиотеки ymaps.
    • Значение по умолчанию: автоматически формируется на основе ключей из других модулей.
  3. Отключить модуль на страницах с get параметрами (DSBL_GET)

    • Список GET-параметров (через запятую), при наличии которых модуль не будет работать.
    • Пример: preview,edit — модуль отключится на страницах /catalog/?preview=1 или /product/?edit=true.
  4. Отключить модуль на страницах по регулярному выражению (DSBL_REJ)

    • Список регулярных выражений (каждое с новой строки), при совпадении с текущим URL модуль не будет работать.
    • Примеры:
      • /catalog/ — точный путь (опубликуется на /catalog/index.php).
      • #\/catalog\/*#i — регулярное выражение (не опубликуется на */catalog/*).
    • данные правила приоритетнее правил включения
  5. Включить модуль на страницах по регулярному выражению (ENBL_REJ)

    • Список регулярных выражений (каждое с новой строки).
    • Если задано хотя бы одно выражение в ENBL_REJ, модуль сработает только на страницах, совпадающих с этими выражениями.

Права доступа

В отдельной вкладке настроек доступна настройка прав доступа для различных групп пользователей.

Установка и удаление

  • Установка: Через админку Bitrix → "Модули" → "Установить модуль".
  • Удаление: Через админку Bitrix → "Модули" → "Удалить модуль". При удалении можно сохранить настройки модуля.
Для улучшения работы сайта используются cookie.
Подробнее об этом в Политике cookie.
Принять Настроить