Использование query strings для фильтрации видов тем

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

:person_raising_hand: Требуемый уровень пользователя: Все пользователи

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

Понимание строк запроса

Строка запроса добавляется в конец URL-адреса, начиная с вопросительного знака (?), за которым следуют параметры и их значения. Например:

https://meta.discourse.org/?status=open

В этом URL-адресе ?status=open — это строка запроса.

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

Доступные параметры строки запроса

Вот параметры строки запроса, которые можно использовать на всех сайтах Discourse:

Статус

Используйте ?status=_, чтобы отобразить темы с определенным статусом:

  • open: Только открытые темы
  • closed: Только закрытые темы
  • archived: Только архивные темы
  • listed: Только опубликованные (видимые) темы
  • unlisted: Только непубликуемые темы
  • deleted: Только удаленные темы
  • public: Только темы в публичных категориях (без ограничений на чтение)

Поиск

Используйте ?search=_, чтобы создать полную страницу результатов поиска. Замените _ на ваши поисковые запросы.

Состояние

Используйте ?state=_, чтобы отобразить темы с определенным состоянием:

  • muted: Показать темы, которые вы отключили
  • normal: Показать темы, которые вы установили в нормальное состояние
  • tracking: Показать темы, за которыми вы следите
  • watching: Показать темы, которые вы отслеживаете
  • watching_first_post: Показать темы в категориях или с тегами, за первыми сообщениями которых вы следите

Сортировка по возрастанию

Используйте ?ascending=true, чтобы показать темы по дате в порядке возрастания. По умолчанию используется порядок убывания.

Порядок

Используйте ?order=_, чтобы отобразить темы в порядке убывания по различным критериям:

  • likes: По количеству лайков
  • op_likes: По количеству лайков на исходном сообщении
  • views: По количеству просмотров
  • posts: По количеству сообщений (ответов)
  • activity: По дате последнего действия (включает дату bumped_at)
  • posters: По количеству участников
  • category: По названию категории (от Z до A)
  • created: По дате создания темы (сначала новые темы)

Фильтры по количеству сообщений

  • ?max_posts=_: Возвращает темы с количеством сообщений _ или меньше
  • ?min_posts=_: Возвращает темы с количеством сообщений _ или больше

Фильтры по возрасту

  • ?before=_: Возвращает темы, созданные более _ дней назад
  • ?bumped_before=_: Возвращает темы, которые были обновлены более _ дней назад

ID тем

Используйте ?topic_ids=_, чтобы отобразить список тем с определенными ID. Принимает строку с разделителями-запятыми ID тем.

Категория

Используйте ?category=_, чтобы отобразить список тем для определенных категорий. Принимает строку с разделителями-запятыми числовых ID категорий.

Используйте ?no_subcategories=true, чтобы исключить темы из подкатегорий при фильтрации по категории.

Теги

Используйте ?tags=_, чтобы отфильтровать темы по тегам. Например, https://meta.discourse.org/?tags=how-to покажет все темы с тегом how-to.

Используйте ?match_all_tags=true в сочетании с ?tags=_, чтобы требовать, чтобы темы имели все указанные теги (а не любой из них).

Используйте ?no_tags=true, чтобы показать только темы без тегов.

Используйте ?exclude_tag=_, чтобы исключить темы с определенным тегом.

Фильтр «Понравившиеся»

Используйте ?f=liked, чтобы показать только темы, в которых текущий пользователь лайкнул сообщение.

Параметры, специфичные для плагинов

Некоторые плагины добавляют дополнительные параметры строки запроса:

Плагин Solved

Если у вас установлен плагин Solved:

  • ?solved=yes: Показать решенные темы
  • ?solved=no: Показать нерешенные темы

Плагин Assign

Если у вас установлен плагин Assign:

  • ?assigned=username: Просмотр всех назначенных тем для конкретного пользователя
  • ?assigned=*: Просмотр всех назначенных тем для всех пользователей
  • ?assigned=me: Просмотр всех тем, назначенных текущему пользователю
  • ?assigned=nobody: Просмотр всех неназначенных тем

Комбинирование строк запроса

Вы можете комбинировать несколько строк запроса с помощью символа амперсанда (&). При использовании нескольких строк запроса символ ? нужен только для первого параметра. Например:

https://meta.discourse.org/?max_posts=1&status=closed

Этот URL-адрес покажет закрытые темы с одним сообщением.

Использование страницы расширенного поиска

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

Дополнительные ресурсы

18 лайков

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

1 лайк

Похоже, это одни и те же параметры (нам просто нужно заменить : в поисковом фильтре на = в строке запроса), но некоторые поисковые фильтры не работают при использовании в качестве параметров строки запроса вне поиска.

Поэтому я считаю, что полный список находится в этой документации. Мне было бы интересно убедиться в этом, посмотрев, в каком файле Discourse они упоминаются.

Редактирование: теперь существует маршрут /filter с гораздо большим количеством критериев фильтрации:

3 лайка

Если у вас установлен плагин Solved, вы также можете использовать:

?solved=yes
?solved=no

3 лайка

Думаю, для Assign тоже есть такие возможности:

Добавлю их. :+1:

3 лайка

Если не ошибаюсь, это также можно использовать для тегов?

Отличный гайд

2 лайка

Да, вы можете добавлять ?tags=_ к URL-адресам Discourse, используя строки запроса для фильтрации по тегам.

Например, https://meta.discourse.org/?tags=how-to перенаправит вас ко всем тегам how-to на Meta.

2 лайка

Возможно ли использовать фильтр исключения (отрицательный) с помощью строки запроса? В настоящее время в расширенном поиске это делается добавлением префикса «-»:

-tags: smth, но это невозможно сделать через строку запроса.

Это определенно возможно с использованием нового маршрута /filter.

Например https://meta.discourse.org/filter?q=-tags%3Aofficial%20%20category%3Aplugin

3 лайка

Спасибо! Как насчет поиска по нескольким статусам (ИЛИ)? Я пробовал разные способы поиска, но, похоже, это вообще не поддерживается. Например, у меня есть темы со статусами «открыта», «закрыта» или «архивирована», и я просто хочу отфильтровать архивированные, то есть искать темы со статусом «открыта» ИЛИ «закрыта». Пока я пробовал:

  • Расширенный поиск: status:open,closed
  • Расширенный поиск: status:open status:closed
  • Строка запроса: ?status=open,closed

Ничего из этого не работает.