Перейти к содержанию

Ссылки на страницы⚓︎

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

Мы рассмотрим несколько простых примеров, используя эту очень простую, урезанную модель того, как может выглядеть каталог user/pages сайта Grav.

Директория Pages

Используя эту структуру каталогов в качестве примера, мы рассмотрим различные типы ссылок, которые вы можете использовать в своем контенте.

Для начала вот краткий обзор некоторых общих компонентов Grav-ссылки и их значений.

[Связанный контент](../path/slug/page)
Строка Описание
[] Квадратные скобки используются для обтекания текста или альтернативного содержимого, на которое делается ссылка. В HTML это будет контент, помещенный между <a href=""> и </a>.
() Круглые скобки используются для заключения самой ссылки. Они помещаются сразу после квадратной скобки..
../ Когда используется в ссылке, это означает перемещение вверх по каталогу.

Относительный слаг⚓︎

Grav не ограничивает ваши внутренние ссылки конкретными именами в структуре файлов/каталогов. Он также может извлекать ярлыки, назначенные как в заголовке файла, так и в имени резервного каталога. Это упрощает создание быстрых ссылок, поскольку вам не нужно запоминать конкретное имя файла, а нужно запоминать ярлык.

Механизм создания шаблонов Grav использует имена файлов, чтобы определить, какой шаблон применить к ним. Например, блог может использовать стандартное имя файла item.md для каждого сообщения в блоге. Самому сообщению в блоге можно назначить более понятный ярлык, например grass или grass-is-green.

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

Вот несколько примеров ссылок с относительным слагом.

В этом примере мы перемещаемся вверх по каталогу и загружаем страницу по умолчанию, расположенную в каталоге pages/01.blue/02.water/item.md, из pages/01.blue/01.sky/item.md. У файла item.md нет назначенного слага, поэтому Grav использует имя каталога.

[ссылка](../water)

Следующий пример делает очень похожую вещь, связывая pages/01.blue/01.sky/item.md с pages/02.green/02.tree/item.md, но при загрузке файла item.md файлу tree-is-green был назначен слаг.

[ссылка](/green/tree-is-green)

Слаг, помещенный в заголовок item.md, заменяет слаг green из имени папки по умолчанию.

Относительная директория⚓︎

Ссылки на относительные директории используют назначения, установленные относительно текущей страницы. Это может быть как простая ссылка на другой файл в текущем каталоге, например, файл изображения, так и сложная, например переход на несколько уровней каталогов, а затем возврат к конкретной папке/файлу, которые необходимо отобразить.

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

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

Ссылка на файл указывает на конкретный файл по имени, а не по его каталогу или ярлыку. Если вы создавали ссылку с pages/01.blue/01.sky/item.md на /pages/02.green/01.grass/item.md, вы бы использовали следующую команду.

[ссылка](/02.green/01.grass/item.md)

Эта ссылка перемещает две папки вверх, как обозначено /, а затем вниз на две папки, указывая непосредственно на item.md в качестве места назначения.

Иногда вы просто хотите направить пользователя вверх по одному каталогу, загрузив страницу по умолчанию. Поскольку точный файл не указывается, Grav доверяет выбрать подходящий для загрузки. Для хорошо организованного сайта Grav это не должно быть проблемой.

В этом примере мы будем связывать pages/01.blue/01.sky/item.md с /pages/02.green/, что по умолчанию загрузит файл color.md.

[ссылка](/02.green)

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

Следующий пример очень похож на ссылку на файл, которую мы продемонстрировали ранее. Вместо того, чтобы напрямую связываться с файлом, мы связываемся с его каталогом, который в любом случае должен загрузить нужный нам файл, поскольку это файл по умолчанию. Если вы создавали ссылку с pages/01.blue/01.sky/item.md на /pages/02.green/01.grass/, вы должны использовать следующую команду.

[ссылка](/02.green/01.grass)

Абсолютные ссылки⚓︎

Абсолютные ссылки аналогичны относительным ссылкам, но относятся к корню сайта. В Grav это обычно находится в вашем каталоге /user/pages/. Этот тип ссылки может быть выполнен двумя разными способами.

Вы можете сделать это аналогично стилю относительных слагов, который для простоты использует в пути имя каталога или имя каталога. Этот метод устраняет потенциальные проблемы изменения порядка позже (изменение номера в начале имени папки), разрывая ссылку. Это будет наиболее часто используемый метод абсолютной привязки.

В абсолютной ссылке ссылка открывается с помощью символа /. Вот пример абсолютной ссылки на pages/01.blue/01.sky/item.md в стиле слаг.

[ссылка](/blue/sky)

Второй метод основан на стиле относительных директорий, подробно описанном ранее. Этот метод оставляет такие элементы, как порядковые номера в начале имен каталогов. Хотя это увеличивает вероятность неработающей ссылки при переупорядочении контента, это более надежно при использовании с такими службами, как Github, где ссылки на контент не имеют преимущества гибкости Grav. Вот пример абсолютной ссылки на pages/01.blue/01.sky/item.md с использованием этого стиля.

[ссылка](/01.blue/01.sky)

Удаленные ссылки⚓︎

Удаленные ссылки позволяют напрямую ссылаться практически на любой файл или документ через его URL. Это не обязательно должно включать содержание вашего собственного сайта, но может. Вот пример того, как вы разместите ссылку на домашнюю страницу Google.

[ссылка](https://www.google.com)

Вы можете ссылаться практически на любой прямой URL, включая защищенные ссылки HTTPS. Например:

[ссылка](https://github.com)

Атрибуты ссылки⚓︎

Отличная новая функция, которой вы можете воспользоваться — предоставление атрибутов ссылки напрямую через синтаксис Markdown. Это позволяет легко добавлять атрибуты HTML class, id, rel и target без необходимости использовать Markdown Extra.

Вот некоторые примеры этого:

Атрибут Class/Classes⚓︎

[Большая кнопка](../some-page?classes=button,big)

что приведет к такому HTML:

<a href="/your/pages/some-page" class="button big">Большая кнопка</a>

Атрибут ID⚓︎

[Уникальная кнопка](../some-page?id=important-button)

что приведет к такому HTML:

<a href="/your/pages/some-page" id="important-button">Уникальная кнопка</a>

Атрибут Rel⚓︎

[Ссылка с NoFollow](../some-page?rel=nofollow)

что приведет к такому HTML:

<a href="/your/pages/some-page" rel="nofollow">Ссылка с NoFollow</a>

Атрибут Target⚓︎

[Ссылка в новой вкладке](../some-page?target=_blank)

что приведет к такому HTML:

<a href="/your/pages/some-page" target="_blank">Ссылка в новой вкладке</a>

Комбинации атрибутов⚓︎

[Комбинации атрибутов](../some-page?target=_blank&classes=button)

что приведет к такому HTML:

<a href="/your/pages/some-page" target="_blank" class="button">Комбинации атрибутов</a>

Комбинации атрибутов с якорями⚓︎

[Якорь ссылки](../some-page?target=_blank&classes=button#element-id)

что приведет к такому HTML:

<a href="/your/pages/some-page#element-id" target="_blank" class="button">Якорь ссылки</a>

Якорные ссылки на той же странице⚓︎

[Якорь ссылки](?classes=button#element-id)

что приведет к такому HTML:

<a href="#element-id" class="button">

Обратите внимание, что привязка должна появиться после запроса, как описано в проблеме 1324

Передача неподдерживаемых атрибутов⚓︎

[Передача атрибута 'cat'](../some-page?classes=underline&cat=black)

что приведет к такому HTML:

<a href="/your/pages/some-page?cat=black" class="underline">Передача атрибута 'cat'</a>

Пропуск всех атрибутов⚓︎

[Пропуск всех атрибутов](../some-page?classes=underline&rel=nofollow&noprocess)

что приведет к такому HTML:

<a href="/your/pages/some-page?rel=nofollow&classes=underline">Пропуск всех атрибутов</a>

Пропуск определённых атрибутов⚓︎

[Пропускаем определённые атрибуты](../some-page?id=myvariable&classes=underline&target=_blank&noprocess=id,classes)

что приведет к такому HTML:

<a href="/your/pages/some-page?id=myvariable&classes=underline" target="_blank">Пропускаем определённые атрибуты</a>

Это полезно при попытке пропустить один или несколько конкретных атрибутов, не затрагивая другие.