# Обработка якорей в постах, созданных с помощью Markdown

**URL:** https://meta.discourse.org/t/handling-anchors-in-posts-created-with-markdown/349349
**Category:** Support
**Tags:** markdown
**Created:** [28.Январь.2025 09:58:33 UTC](https://meta.discourse.org/t/handling-anchors-in-posts-created-with-markdown/349349 "2025-01-28T09:58:33Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![Nihokam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nihokam/32/485093_2.png) [@Nihokam](https://meta.discourse.org/u/Nihokam)
#### Post date: [28.Январь.2025 09:58:33 UTC](https://meta.discourse.org/t/handling-anchors-in-posts-created-with-markdown/349349/1 "2025-01-28T09:58:33Z")

</div>

Всем привет! Я использую сайт на Discourse для публикации спецификаций, которые в основном написаны на Markdown, но столкнулся с проблемой: якоря, используемые для заголовков, отображаются, хотя должны быть скрыты.

Подскажите, пожалуйста, есть ли способ их скрыть?

 ![image](https://global.discourse-cdn.com/meta/original/4X/8/7/6/8764e5a95e44ecc0d54b744848660d3b803b76d8.png)

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [28.Январь.2025 15:58:43 UTC](https://meta.discourse.org/t/handling-anchors-in-posts-created-with-markdown/349349/2 "2025-01-28T15:58:43Z")

</div>

Привет, добро пожаловать!

Этот синтаксис из [kramdown](https://kramdown.gettalong.org/) или [PHP Markdown Extra](http://michelf.com/projects/php-markdown/extra/)?

Discourse использует [MarkdownIt](https://markdown-it.github.io/), который основан на спецификации [CommonMark](https://commonmark.org/). Он не поддерживает указание идентификатора заголовка.

Кажется, что этот вопрос обсуждался ранее: [Anchors in markdown - Spec - CommonMark Discussion](https://talk.commonmark.org/t/anchors-in-markdown/247), но я не вижу какого-либо окончательного вывода.

Однако Discourse автоматически генерирует якоря.  
Вы можете увидеть это здесь:

[https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse-markdown-it/src/features/anchor.js](https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse-markdown-it/src/features/anchor.js)

В целом, вы можете ожидать следующие идентификаторы:

- `h-{headingId}` (без ID поста, без слага)
- `h-{slug}-{headingId}` (без ID поста)
- `p-{postId}-h-{headingId}` (с ID поста, без слага)
- `p-{postId}-h-{slug}-{headingId}` (с ID поста и слагом)

Например:

 ![На изображении показан подробный интерфейс онлайн-IDE, демонстрирующий синтаксис HTML-кода с выделенными элементами, включая тег якоря, связанные с ним значения, CSS-свойство flex и семантически релевантные структуры кода. (Подпись сгенерирована ИИ)](https://global.discourse-cdn.com/meta/original/4X/e/7/3/e738f88e540e6c4fdf3012cb9df32b161bf2e9e2.png)

Если вы предпочитаете, вы все еще можете создать якорь вручную с помощью HTML, например, `<a name="anchor_name"></a>`

 ![На изображении показано окно веб-браузера с открытым полем ввода «Заголовок», содержащим HTML-код: «<<» за которым следует '<a name="test">Header</a>'. (Подпись сгенерирована ИИ)](https://global.discourse-cdn.com/meta/original/4X/7/e/7/7e7f99e937d07283ff5276180f6a99e9ffd07c6b.png)  
 ![На изображении показан HTML-код, создающий тег якоря, привязанный к «header-1», с атрибутами «name» и «href», установленными в «p-704-a-nametestestast Header» и «test» соответственно, что указывает на интерфейс навигации по веб-странице, связанный с мониторингом производительности. (Подпись сгенерирована ИИ)](https://global.discourse-cdn.com/meta/original/4X/8/a/6/8a671d53fe8848a5c05a7ffd76d55617287fa1b6.png)

Дополнительные ресурсы —  
Если вам нужно сгенерировать оглавление, для вас есть этот компонент:

> [@DiscoTOC - automatic table of contents](https://meta.discourse.org/t/discotoc-automatic-table-of-contents/111143):
>
> discourse2Summary DiscoTOC will allow you to generate an interactive table of contents for your topics with one click!eyeglassesPreview [Preview on Discourse Theme Creator](https://discourse.theme-creator.io/theme/Discourse/discotoc)hammer_and_wrenchRepository Link [https://github.com/discourse/DiscoTOC](https://github.com/discourse/DiscoTOC)open_bookNew to Discourse Themes? [Beginner’s guide to using Discourse Themes](https://meta.discourse.org/t/beginners-guide-to-using-discourse-themes/91966) Install this theme component Samples Desktop Mobile Features toc = table of contents Automatically generates the …

---

<div class="post-metadata">

### Author: ![Nihokam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nihokam/32/485093_2.png) [@Nihokam](https://meta.discourse.org/u/Nihokam)
#### Post date: [29.Январь.2025 13:23:26 UTC](https://meta.discourse.org/t/handling-anchors-in-posts-created-with-markdown/349349/3 "2025-01-29T13:23:26Z")

</div>

Большое спасибо @Arkshine!

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

Думаю, я напишу скрипт для очистки перед публикацией контента.

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [29.Январь.2025 14:30:26 UTC](https://meta.discourse.org/t/handling-anchors-in-posts-created-with-markdown/349349/4 "2025-01-29T14:30:26Z")

</div>

Понятно!

Решение также заключается в создании плагина для Discourse с поддержкой синтаксиса Markdown. Если у вас есть бюджет, вы можете обратиться в #Marketplace.

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [30.Январь.2025 20:06:26 UTC](https://meta.discourse.org/t/handling-anchors-in-posts-created-with-markdown/349349/5 "2025-01-30T20:06:26Z")

</div>

@Nihokam

Если вы всё ещё заинтересованы, я создал небольшой плагин для Discourse, который позволяет указывать идентификатор якоря рядом с заголовком.

> **[GitHub - Arkshine/discourse-custom-anchor-id](https://github.com/Arkshine/discourse-custom-anchor-id)**
>
> Contribute to Arkshine/discourse-custom-anchor-id development by creating an account on GitHub.

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

```plaintext
## Мой заголовок {#custom_section}

```

что сгенерирует:

```html
<a name="custom_section" href="#custom_section" class="custom-anchor-id"></a>

```

 ![На изображении показан интерфейс редактора Markdown с различными иконками форматирования HTML и Markdown, а также раскрытый список заголовков с заголовком 1, подзаголовком 1.1, ещё одним заголовком и символами пользовательских HTML-сущностей на панели инструментов. (Подпись сгенерирована ИИ)](https://global.discourse-cdn.com/meta/original/4X/e/d/b/edb9be5d8ca136796f4dd5c994cc3540f3a9fcf5.png)

 ![image](https://global.discourse-cdn.com/meta/original/4X/1/c/b/1cbea70d0daea1d82c097cd4ba2bc69dba369d2d.png)

 ![На изображении показан фрагмент HTML с вложенными тегами <h2> и <h3>, содержащими пользовательские ссылки-якоря для кликабельных разделов с заголовками «Heading 1», «Sub-heading 1.1» и «Another heading». (Подпись сгенерирована ИИ)](https://global.discourse-cdn.com/meta/original/4X/6/b/1/6b10b6821dd80fb75ea55cd82f8be11bd624f9a9.png)

Вы можете попробовать его! Дайте знать, если возникнут какие-либо проблемы.

---

<div class="post-metadata">

### Author: ![Nihokam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nihokam/32/485093_2.png) [@Nihokam](https://meta.discourse.org/u/Nihokam)
#### Post date: [04.Февраль.2025 14:11:54 UTC](https://meta.discourse.org/t/handling-anchors-in-posts-created-with-markdown/349349/6 "2025-02-04T14:11:54Z")

</div>

Спасибо @Arkshine!

Я уточню у нашего админа Discourse насчёт его использования 😁

---

<div class="post-metadata">

### Author: ![mrmowji](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mrmowji/32/505517_2.png) [@mrmowji](https://meta.discourse.org/u/mrmowji)
#### Post date: [15.Июнь.2025 10:49:24 UTC](https://meta.discourse.org/t/handling-anchors-in-posts-created-with-markdown/349349/7 "2025-06-15T10:49:24Z")

</div>

> [@Arkshine](#):
>
> По сути, вы можете ожидать следующие ID:
> 
> - `h-{headingId}` (нет ID поста, нет слайга)
> - `h-{slug}-{headingId}` (нет ID поста)
> - `p-{postId}-h-{headingId}` (ID поста, нет слайга)
> - `p-{postId}-h-{slug}-{headingId}` (ID поста, слайг)

@Arkshine, вы знаете, как генерируются якоря в Discourse (текущий сайт)? Спрашиваю, потому что они, кажется, не следуют паттернам, которые вы привели. Например, посмотрите это:

```plaintext
https://meta.discourse.org/t/adding-a-table-to-your-post-using-markdown/66544#creating-a-simple-table-1

```

Есть ли для этого настройка? Я не мог её найти. Или они используют `<a>`? Или ваш плагин?
