Ко мне обратился пользователь Grav CMS с вопросом о том, почему система управления контентом портит ссылки с параметрами в содержании страниц веб-сайта и как это предотвратить. Если эти вопросы возникли у одного пользователя, существует вероятность, что возникнут и у других, поэтому отвечаю этой заметкой.

Система управления контентом Grav CMS действительно может портить ссылки в содержании страниц, но делает это непреднамеренно и при определённых условиях. Причина этого в логике работы встроенного Markdown парсера ссылок. Что это за логика и при каких условиях ссылка становится испорченной?

Markdown парсер Grav CMS обрабатывает все встреченные ссылки в разметке Markdown, считая параметры class, id, rel и target в адресе ссылки атрибутами для формирования HTML кода ссылки, не имеющими отношения непосредственно к адресу ссылки. В результате работы парсера перечисленные параметры исключаются из адреса ссылки. Примеры ссылок до и после обработки парсером ниже.

[Страница 1](/index.php?id=page-1&class=data)
<a href="/index.php" id="page-1" class="data">Страница 1</a>

Как обойти такое поведение парсера Markdown в Grav CMS, если адреса ссылок содержат параметры class, id, rel или target? Есть два варианта:

  1. Задавать ссылки с перечисленными параметрами через HTML код;
  2. Добавлять к адресам ссылок специальный параметр noprocess, отключающий разбор парсером параметров в адресах ссылок.

Прочитать подробнее о работе Grav CMS со ссылками, параметрами и атрибутами можно в официальной документации в разделе Link Attributes.