Якоря не работают между постами в теме

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

Оказалось, что реализовать это задуманное сложнее, чем кажется, и, к сожалению, поиск по Meta не сильно помогает. Мы знаем о существовании плагина (auto-ToC или как он там называется), но нам это нужно только для одной конкретной темы, поэтому не хотим связываться с установкой плагинов.

Мы пробовали использовать значки ссылок рядом с автоматически сгенерированными заголовками в Markdown (через символы #), но это не сработало — неясно, связано ли это с цветами, которые мы используем для заголовков, или с чем-то другим, но в любом случае это работает для некоторых заголовков, но не для всех.

Попытка использовать HTML-теги с ручными идентификаторами для заголовков тоже не увенчалась успехом — переходы по ссылкам просто не работали. Мы где-то на Meta читали, что информация об идентификаторах удаляется Discourse, поэтому отказались от этого подхода.

Затем мы наткнулись на хитрую идею: размещать пустые ссылки прямо над заголовками, к которым можно было бы переходить. Сначала это вроде бы работало, но после нескольких постов переходы перестали попадать в нужное место в связанном посте.

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

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

Если якорь был <a name="anchor"></a> в первом посте этой темы, использование этой ссылки сработает даже в посте, например, № 456:

https://meta.discourse.org/t/anchors-not-working-across-posts-within-topic/240512/1#anchor

Это помогло?

1 лайк

К сожалению, мы уже делали именно это.

Наши ссылки в оглавлении имели следующий формат:

https://www.site.com/t/topic-name/ABCD/E#header--header-name

а наши реальные ссылки в сообщениях — такой:

<a name="header--header-name"></a>

Это работало для первых нескольких сообщений, но перестало работать примерно на 8-м или 9-м сообщении.

1 лайк

Я использую этот метод на другом сайте, и он отлично работает. Не могли бы вы поделиться ссылкой, чтобы я мог посмотреть, как это работает в действии?

Нет, к сожалению, так как пост всё ещё доступен только для сотрудников.

Может быть, я попробую воспроизвести нашу настройку на сайте создателя тем и посмотрю, будет ли это работать там?

Обновление: в создателе тем нет поддержки BBCode от Discourse, поэтому я не уверен, что всё будет работать идеально один в один. Жаль.

Мы обычно используем для этого try.discourse.org, но в данном случае это может оказаться излишним трудозатрат?

Единственное, что выглядит иначе по сравнению с теми, что я использую, — это двойной дефис, но это кажется маловероятным. Возможно, дело в количестве ссылок в заголовке? Не уверен.

1 лайк

Именно это я и подозреваю, поэтому это классифицировано как #баг, а не как #поддержка.

Я забыл о try, возможно, перемещу туда.

1 лайк

Поймал

Воспроизводится на Try

https://try.discourse.org/t/testing-heading-links-i-guess/1405?u=orangeandblack5

Первые несколько наборов якорных ссылок работают

Якоря для трёх последних постов не работают

Извините, что выкатил это в выходные

Когда обычно очищают данные на Try? Лучше бы не пришлось заново восстанавливать весь набор якорных ссылок, ха-ха

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

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

1 лайк

Я имею в виду, что мы, безусловно, можем использовать это как временное решение.

Потому что вы правы, это действительно работает.

Однако никто обычно не перемещается таким образом, поэтому я точно считаю, что это довольно очевидная ошибка, и в идеале её следует исправить, когда у команды будет время заняться этим.


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

Кажется, это лучше, чем сломанная функция для наших пользователей.


Есть ли способ сохранить этот пост на Try, чтобы он не был удалён, и кто-то, кто знает о Discourse больше, чем я, мог разобраться, почему это происходит?

Или мне лучше воссоздать его здесь?

Вы можете открыть эти сообщения в режиме редактирования или взять raw-версию и скопировать их в тему на вашем сайте как более постоянный пример для ссылки (или сохранить их и воссоздать позже).

Эх, я сделаю это прямо здесь

https://meta.discourse.org/t/example-anchor-links-dont-work-unless-page-reloaded/240589?u=orangeandblack5

Так у нас не будет риска, что что-то на нашем сайте помешает команде исправить проблему.