Почему не работает якорь на странице 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.