Topic URL to include its Category

I am investigating the possibility of including the category in the topic URL for retargeting purposes.

For example: https://meta.discourse.org/t/support/where-can-i-create-tags/31094 or https://meta.discourse.org/support/t/where-can-i-create-tags/31094

From previous responses on this subject, it seems as though this will wreck havoc on the routing system, correct?

What about the possibility of including the category in query string? https://meta.discourse.org/t/where-can-i-create-tags/31094/?category=support

Thoughts, suggestions, answers?

I think if you put it before the topic ID at the end there’s no problem… but you can’t add more slashes or other delimiters.

Maybe you can use underscore to delimit if you need it, e.g. these two links go to the same place without any problem:

https://meta.discourse.org/t/topic-url-to-include-its-category/39996

https://meta.discourse.org/t/_support_topic-url-to-include-its-category/39996

your URL with question mark at the end might work - seems to work here. Not sure what the effect of that is.

https://meta.discourse.org/t/where-can-i-create-tags/31094/?category=support

Возможно ли это через настройку сайта или плагин?

Здравствуйте,

Я полный новичок не только в Discourse, но и в форумах в целом, и хотел бы узнать, возможно ли и как сделать так, чтобы URL темы содержал информацию о её категории.

Сейчас, насколько я вижу, URL категории выглядит так:
https://randomname.discourse.group/c/category-name/6

Однако при переходе к теме внутри этой категории URL не содержит никакой ссылки на категорию:
https://randomname.discourse.group/t/what-a-great-thread/18

Извините, я пытался найти ответ через поиск, но безуспешно.

Буду очень признателен за помощь.

Спасибо большое

Хорошая идея — правильно подобрать терминологию. В Discourse поток называется темой.

Ассоциация с категорией подразумевается, поэтому она не нужна.

Кроме того, если тему переместить в новую категорию, URL устареет и фактически станет недействительным.

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

Но каков ваш конкретный случай использования? Чего вы пытаетесь достичь?

Я использую стороннее программное обеспечение, которое парсит форум. Мои возможности по формированию запросов ограничены, поэтому при парсинге ветки (темы) программа должна определять категорию, к которой она относится. Похоже, она делает это на основе URL.

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

Категория, полагаю, чётко указана в HTML-коде представлений краулера, так что, возможно, вы сможете вместо этого изменить инструмент, чтобы использовать эту информацию?

Если вы явно предоставляете URL-адреса скрейперу и определяете, как он будет извлекать категорию из них, вы возможно сможете использовать предложенный Тобиасом хак — например, предоставлять ему путь вида /t/category-name__topic-slug/topic-id. Discourse вернет ответ с редиректом 301 на конечный URL, основываясь исключительно на topic-id.

Однако, если скрейпер получает эти URL-адреса в процессе сканирования, это кажется слишком трудоемким решением для изменения, направленного лишь на преодоление ограничения стратегии скрейпинга.

Насколько мне известно, нет. Реализация маршрута /t/category-name/topic-slug/topic_id в плагине кажется выполнимой, но добавление опции, чтобы все ссылки на темы в Discourse предпочитали этот альтернативный маршрут, кажется (лично мне) слишком трудоемким для столь малой выгоды.

Только мысль, но вы думали об использовании RSS-лент? В Discourse есть встроенная функция вывода RSS-лент.

Какое это программное обеспечение? Вы можете получить категорию несколькими способами, не изменяя URL (в HTML и JSON).

Для JSON вместо скрапинга этого:
https://meta.discourse.org/t/topic-url-to-include-its-category/39996

скрапьте это:
https://meta.discourse.org/t/topic-url-to-include-its-category/39996.json

и найдите поле category_id.

Другой вариант — использовать Data Explorer для извлечения нужных данных.