Почему не работает якорь на странице MODX: решение проблемы

    При создании страниц в CMS MODX многие веб-мастера сталкиваются с ситуацией, когда ссылка вида /index.php?id=1#team не приводит к прокрутке к нужному блоку. Проблема кроется не в самом якоре, а в том, как MODX обрабатывает URL и идентификаторы элементов. Рассмотрим основные причины и способы исправления без вмешательства в PHP-код.

    Почему ссылка с id=1#team не работает в MODX

    MODX использует систему шаблонов и чанков, где идентификатор страницы (id) часто конфликтует с HTML-атрибутом id. Когда вы пишете href="/index.php?id=1#team", браузер правильно формирует URL, но MODX может не обработать якорь из-за особенностей парсинга. Чаще всего проблема возникает по трём причинам:

    • Конфликт идентификаторов: на странице уже есть элемент с id="1" (например, системный блок MODX), и браузер пытается перейти к нему, а не к #team.
    • Неправильный формат ссылки: MODX рекомендует использовать дружественные URL (ЧПУ), а не прямые ссылки с параметром id.
    • Отсутствие элемента с id="team": блок с таким идентификатором может быть не загружен или иметь другой атрибут (например, class вместо id).

    Как исправить ссылку с якорем в MODX

    Для решения проблемы без доступа к PHP выполните следующие шаги:

    Проверьте наличие элемента с id="team"

    Убедитесь, что на целевой странице (id=1) действительно есть HTML-элемент с атрибутом id="team". Откройте исходный код страницы и найдите <div id="team"> или аналогичный тег. Если элемент отсутствует, добавьте его через менеджер ресурсов MODX.

    Используйте дружественные URL

    Включите ЧПУ в настройках MODX (Система → Настройки → Дружественные URL). После этого ссылка будет выглядеть как /nazvanie-stranicy#team. Пример: href="/o-kompanii#team". Это устраняет конфликт с параметром id.

    Убедитесь, что якорь не перехватывается JavaScript

    Если на сайте используется JavaScript-роутинг (например, для одностраничных приложений), он может блокировать стандартное поведение якорей. Проверьте консоль браузера на наличие ошибок и временно отключите скрипты для теста.

    Альтернативный метод: передача якоря через GET-параметр

    Если дружественные URL недоступны, можно использовать JavaScript для перехода к якорю после загрузки страницы. Добавьте в шаблон страницы следующий код:

    <script>
    if (window.location.hash) {
      var target = window.location.hash.substring(1);
      var element = document.getElementById(target);
      if (element) {
        element.scrollIntoView({ behavior: 'smooth' });
      }
    }
    </script>

    Этот скрипт автоматически прокрутит страницу к блоку #team после полной загрузки DOM.

    Распространённые ошибки при работе с якорями в MODX

    • Дублирование id: на странице не должно быть двух элементов с одинаковым id. Проверьте через поиск по исходному коду.
    • Кэширование: MODX кэширует страницы, и изменения могут не отображаться сразу. Очистите кэш в меню «Система → Очистить кэш».
    • Неправильный синтаксис: якорь пишется без пробелов и спецсимволов, только латиница или транслит.

    Если после всех проверок ссылка /index.php?id=1#team всё ещё не работает, скорее всего, проблема в конфликте с системным идентификатором MODX. В этом случае единственное надёжное решение - переключиться на дружественные URL.

    Часто задаваемые вопросы