Jump to main content Jump to doc navigation

Что такое именованный якорь?

Именованный якорь - это ссылка на контент в текущем ресурсе.

Типичный именованный якорь будет похож на:

<a name="prohibited"></a>

Проблема с использованием именованных якорей с включенными MODX и дружественными URL-адресами заключается в том, что тег <base href =" ">, необходимый для поддержки относительных URL, будет сбивать браузеры с мысли, что любые якоря указывают на базовую страницу href, которая обычно будет вашей домашней страницей. К счастью, нет ничего невозможного с MODX, и есть (по крайней мере) два способа преодолеть эту проблему.

Доступ к именованной привязке путем добавления URL-адреса вручную

Чтобы сгенерировать ссылку на текущий Ресурс при использовании именованного якоря «prohibited»:

<a href="[[~[[*id]]]]#prohibited">Запрещенные действия</a>

Чтобы сгенерировать ссылку на ресурс с идентификатором 12 при использовании именованного якоря «prohibited»:

<a href="[[~12]]#prohibited">Запрещенные действия</a>

Использование плагина для автоматического добавления URL при использовании якорей

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

Поместите следующий код в новый плагин и на вкладке «Системные события» назначьте его для события «OnWebPagePrerender» (на основе этой записи).

if($modx->resource->get('id') !=$modx->config['site_start']) {
  $modx->resource->_output =str_replace('href="#','href="' .$modx->makeUrl($modx->resource->get('id')) .'#',$modx->resource->_output);
}

Сначала код проверяет, что мы не на главной странице (если мы здесь, нет необходимости добавлять URL на страницу). Когда это не так, он заменит любые вхождения href="# на href="link-to-page.html#, убедившись, что ваши якоря будут работать так, как задумано.

С этим решением вы все еще можете ссылаться на якоря на других страницах, используя второй пример выше.