Idealmente, al personalizar Discourse mediante temas o complementos, deberías usar CSS, la API de complementos de JavaScript o puntos de conexión de complementos. Si ninguna de estas opciones funciona para tu caso de uso, siéntete libre de abrir una PR en el núcleo de Discourse o iniciar un tema Development aquí en Meta. Siempre estamos encantados de discutir la adición de nuevos puntos de conexión o APIs para facilitar la personalización.
Si has agotado todas las demás opciones, es posible que debas recurrir a sobrescrituras de plantillas. Esta técnica te permite sobrescribir la plantilla completa de cualquier componente o ruta de Ember desde tu tema o complemento.
Esta no es una forma recomendada de personalizar Discourse. Los cambios diarios en el núcleo de Discourse entrarán en conflicto con tu sobrescritura de plantilla eventualmente, lo que podría causar errores catastróficos al renderizar el foro.
Si decides tomar este enfoque, asegúrate de contar con procesos adecuados de pruebas automatizadas y control de calidad para detectar regresiones. Si distribuyes un tema o complemento con sobrescrituras de plantillas, por favor asegúrate de que los administradores del foro sean conscientes de los riesgos de estabilidad que conlleva tu tema o complemento.
![]()
![]()
Actualización de octubre de 2023: Para nuevas funciones, Discourse está migrando cada vez más hacia el uso de componentes creados con el formato de archivo
.gjsde Ember. Las plantillas de estos componentes se definen en línea y no pueden ser sobrescritas por temas o complementos.A partir de ahora, todas las personalizaciones de plantillas deben realizarse mediante puntos de conexión de complementos.
Entiendo que esto fallará en el futuro cercano, muéstrame la documentación de todos modos
Sobrescritura de plantillas de componentes
Para sobrescribir la plantilla de un componente de Ember (es decir, cualquier cosa bajo components/* en el núcleo de Discourse), debes crear un archivo .hbs con el mismo nombre en tu tema o complemento. Por ejemplo, para sobrescribir la plantilla del componente badge-button en el núcleo de Discourse, crearías un archivo de plantilla en tu tema o complemento en esta ubicación:
{theme}/javascripts/discourse/templates/components/badge-button.hbs
{plugin}/assets/javascripts/discourse/templates/components/badge-button.hbs
La sobrescritura siempre debe estar anidada dentro del directorio /templates, incluso si el componente central tiene una plantilla ‘co-ubicada’.
Sobrescritura de plantillas de rutas
La sobrescritura de plantillas de rutas (es decir, todas las plantillas que no son de componentes bajo templates/*) funciona de la misma manera que con los componentes. Crea una plantilla con el mismo nombre en tu tema o complemento. Por ejemplo, para sobrescribir discovery.hbs en el núcleo, crearías un archivo como:
{theme}/javascripts/discourse/templates/discovery.hbs
{plugin}/assets/javascripts/discourse/templates/discovery.hbs
Interacción entre múltiples temas / complementos
Si varios temas o complementos instalados sobrescriben la misma plantilla, el ‘ganador’ es aquel con la clasificación numérica más baja en esta lista:
- Sobrescrituras de temas (gana el tema con el ‘id’ más alto)
- Sobrescrituras de complementos (gana el nombre de complemento más reciente en orden alfabético)
- Núcleo
Esta prioridad también significa que puedes sobrescribir plantillas de complementos desde temas. Técnicamente, también puedes sobrescribir plantillas de temas desde otros temas, y plantillas de complementos desde otros complementos, pero el comportamiento puede ser sorprendente debido a la dependencia del nombre del complemento y del id del tema.
¿Cómo funciona esto?
Discourse ensambla y prioriza las plantillas en la clase DiscourseTemplateMap. Para las plantillas de componentes co-ubicadas, esa información se utiliza durante la inicialización de la aplicación para reemplazar las asociaciones de plantillas del núcleo. Para todas las demás plantillas, el mapa es utilizado por el resolvedor en tiempo de ejecución para obtener la plantilla correcta.
Este documento está bajo control de versiones: sugiere cambios en GitHub.