Como parte de nuestra búsqueda continua para estandarizar los sistemas de renderizado en la base de código de Discourse, estamos reemplazando la implementación de la lista de temas.
Anteriormente, esto utilizaba un enfoque de “handlebars en bruto” (.hbr), y podía personalizarse mediante anulaciones de plantillas y raw-plugin-outlets. La nueva implementación de la lista de temas utiliza componentes Glimmer modernos y se ha construido desde cero para ser personalizable de maneras sostenibles.
La nueva implementación ya está disponible detrás de la configuración glimmer_topic_list_mode.
disabled: usa la lista de temas “handlebars en bruto” heredada.auto: detectará la compatibilidad de tus plugins y temas actuales. Si alguno es incompatible, usará el sistema heredado; de lo contrario, usará la nueva implementación.enabled: usará la nueva implementación de la lista de temas. Si tienes plugins o temas incompatibles, tu sitio puede romperse.
Ya hemos actualizado la mayoría de nuestros temas y plugins oficiales para que sean compatibles con el nuevo menú. Pero, si utilizas plugins, temas o componentes de temas de terceros que personalizan la lista de temas, será necesario actualizarlos.
Se imprimirán advertencias en la consola del navegador que identificarán la fuente de la incompatibilidad.
Cronograma de implementación
Estas son estimaciones aproximadas sujetas a cambios
Q4 2024:
implementación principal finalizada
actualización de temas/plugins oficiales (en progreso)
habilitado en Meta
publicado consejo de actualización
Q1 2025:
-
actualización de temas/plugins oficiales -
glimmer_topic_list_modepor defecto aauto; mensajes de advertencia de consola habilitados -
las advertencias activarán una pancarta de advertencia para administradores para cualquier problema restante -
los plugins y temas de terceros deben actualizarse
-
1 de marzo - habilitar la nueva lista de temas para todos los sitios. El valor predeterminado para la configuración del sitio se cambiará a enabled, pero aún será posible volver adisabled.
Q2 2025
después del 1 de abril - eliminación final del modo heredado y del código asociado.
¿Qué significa para mí?
Si tu plugin o tema tiene archivos ‘handlebars en bruto’ (con nombre .hbr o .raw.hbs), estos deberán actualizarse para ser compatibles con la nueva versión. Los archivos .hbs normales para componentes/rutas de Ember no se ven afectados por este cambio.
También se requerirán actualizaciones si usas modifyClass en component:topic-list o component:topic-list-item.
Si tu sitio tiene alguna de estas personalizaciones incompatibles, se imprimirán mensajes de advertencia en la consola del desarrollador del navegador, incluida información sobre qué tema/plugin es la causa.
¿Cuáles son los reemplazos?
Algunos de los antiguos raw-plugin-outlets se han convertido en Plugin Outlets regulares. Estos se pueden actualizar de forma 1:1.
Las personalizaciones más avanzadas deberán evaluarse caso por caso. La nueva lista de temas tiene una serie de nuevas API para una personalización fácil y robusta. Descubre más aquí:
Aquí tienes algunos ejemplos:
-
discourse-assignintroduce una nueva columna a una lista de temas específica. -
discourse-calendarutiliza uno de los nuevos plugin outlets para mostrar la insignia de fecha del evento. -
discourse-solvedutiliza un nuevovalueTransformerpara reemplazar elmodifyClassanterior.
¿Qué pasa con otras personalizaciones?
Si tu personalización no se puede lograr utilizando las nuevas API que hemos introducido, por favor, háznoslo saber creando un nuevo tema Dev para discutirlo.
Soy un autor de plugins/temas. ¿Cómo actualizo un tema/plugin para que admita tanto la lista de temas antigua como la nueva durante la transición?
Los nuevos plugin outlets se renderizan tanto en la implementación antigua como en la nueva de la lista de temas. Por lo tanto: cuando hayas implementado la nueva, simplemente elimina el conector raw-plugin-outlet antiguo.
Para personalizaciones basadas en DAG que reemplazan anulaciones de plantillas o outlets no modernizados, deberás mantener ambas implementaciones durante el período de transición.
Una vez que tu tema/plugin admita ambas implementaciones, antigua y nueva, puedes agregar este comentario mágico en la parte superior de todos tus archivos .hbr:
{{!-- has-modern-replacement --}}
Esto silenciará los mensajes de advertencia y permitirá que se utilice la nueva implementación cuando esté en modo “auto”.


