Tag-union implementation?

AI-generated summary

Tag-union Implementation Discussion

ebadgley initiated a discussion on implementing a tag union capability in Discourse, which would allow users to see topics with at least one of multiple specified tags. Currently, Discourse only supports tag intersections (AND) by default.

ebadgley proposed two possible solutions:

  1. Redirecting search results to the default category page.
  2. Creating a /tags/union/ route, possibly via a plugin.

sam revealed that a tag union route is already available in the form of https://meta.discourse.org/?tags[]=screen-reader&tags[]=accessibility, although it requires direct navigation to work due to Ember router limitations.

david suggested an alternative syntax using a space-separated list, e.g., https://meta.discourse.org/?tags=screen-reader+accessibility, which currently works but does not persist when selecting a category.

attj pointed out that this functionality does not work when selecting a category from the top left menu and requested a solution.

david acknowledged the limitation and mentioned that improving filtering and sorting of topic lists is a long-term goal for the Discourse team.

Continuing the discussion from Tags: category restrictions, tag groups, relationships:

I’m interested in building a tag union capability that would mimic how tag intersections are currently implemented (Tag intersections page): essentially the same result as intersections (the default category/Latest view), but doing an OR on multiple tags rather than an AND. I would appreciate any suggestions as a new Discourse developer.

My thoughts (so far) are as follows:

  • Searching on multiple tags via the search page essentially provides tag-union functionality (Does multiple tag search support AND vs OR?). The problem is that I don’t want the search results view – I want the default category page. Could search results be redirected to accomplish this?

  • If search results can’t be redirected, I’m open to attempting a /tags/union/ route (and have been looking into how intersection works). I would prefer to do this via plugin, but I am concerned that that is not something that could currently be accomplished via a plugin. Any suggestions here would be appreciated.

If there is sufficient user interest to add a tag-union capability into the Discourse core, I’d be willing to do it and submit a PR, but I’m hoping to find an alternative. Thanks in advance.

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

Что думаете? @daniel

Появились ли какие-либо обновления по этому вопросу? Было бы очень полезно добавить маршрут /tags/union.

Теперь у нас это есть, хотя бы в виде маршрута:

https://meta.discourse.org/?tags[]=screen-reader&tags[]=accessibility

В долгосрочной перспективе мы планируем создать интерфейс для более удобной фильтрации и сортировки списков тем.

При переходе по предоставленной ссылке я вижу пустой список тем:

Возможно, здесь есть какая-то проблема?

Да, наш маршрутизатор Ember должен узнать об этом маршруте (cc @david)

Работает, если перейти по URL напрямую

Мне нужно выполнить команду ./launcher rebuild app, чтобы это обновление появилось на моем собственном экземпляре?

Я бы подошёл, пока мы не исправим маршрутизацию на стороне клиента.

Создание массивов queryParam с использованием синтаксиса paramName[] — это особенность, специфичная для бэкенд-фреймворков, и я не думаю, что она поддерживается в Ember нативно. Мы, возможно, сможем заставить это работать, но я лишь бегло посмотрел на серверную реализацию фильтра tags, и там, похоже, также поддерживается список, разделенный пробелами.

Таким образом, эта ссылка уже должна работать без полной перезагрузки страницы: https://meta.discourse.org/?tags=screen-reader+accessibility

Это очень удобно. Однако при выборе категории из верхнего левого угла страница не сохраняет ограничения. Для страниц с одиночными тегами всё работает как ожидалось.

Например, если я нахожусь на /tag/tag1 и выбираю site-feedback в верхнем левом углу, отображается /tags/c/site-feedback/2/tag1.

При /?tags=tag1+tag2 меня просто перенаправляет на /c/site-feedback/2.

Возможно ли реализовать такую функциональность?

Кажется, это также запрашивалось в этих двух темах:

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