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.

No estoy seguro de que esto cuente como «suficiente interés de los usuarios», pero tengo la intención de reactivar esta discusión para ver si los usuarios/equipo están interesados.

¿Qué opinan? @daniel

¿Ha habido alguna actualización sobre esto? Sería muy útil tener una ruta /tags/union.

Ya lo tenemos, al menos en forma de ruta:

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

A largo plazo, estamos pensando en crear una interfaz de usuario para filtrar y ordenar de forma más limpia las listas de temas.

Recibo una lista de temas vacía al hacer clic en la URL proporcionada:

¿Podría haber algún problema?

Sí, nuestro router Ember necesita conocer esta ruta (cc @david)

Funcionará si navegas directamente a la URL.

¿Necesito ejecutar ./launcher rebuild app para tener esta actualización en mi instancia autoalojada?

Esperaría hasta que arreglemos el enrutamiento del lado del cliente.

La creación de matrices de parámetros de consulta utilizando la sintaxis paramName[] es algo específico del framework backend, y no creo que Ember lo admita de forma nativa. Podríamos hacer que funcione, pero solo eché un vistazo rápido a la implementación del lado del servidor del filtro tags y parece que también admitimos una lista separada por espacios.

Por lo tanto, este enlace ya debería funcionar sin una recarga completa de la página: https://meta.discourse.org/?tags=screen-reader+accessibility

Esto es muy bueno. Sin embargo, la página no mantiene las restricciones cuando se selecciona una categoría desde la esquina superior izquierda. Para las páginas con etiquetas únicas, esto funciona como se esperaba.

Por ejemplo, si estoy en /tag/tag1 y elijo site-feedback desde la esquina superior izquierda. Muestra /tags/c/site-feedback/2/tag1.

Con /?tags=tag1+tag2, simplemente me redirige a /c/site-feedback/2.

¿Es posible tener esta funcionalidad?

Supongo que esto también se solicitó en estos dos temas:

Ese tipo de cosas no está soportado en este momento, pero es algo que estamos pensando en mejorar a largo plazo