Componentes personalizados: añadir botón o texto en cualquier punto de conexión del plugin

:information_source: Resumen Añadir un botón o texto en cualquier lugar
:hammer_and_wrench: Repositorio https://github.com/literatecomputing/discourse-custom-components
:question: Guía de instalación Cómo instalar un tema o componente de tema
:open_book: ¿Nuevo en los temas de Discourse? Guía para principiantes sobre el uso de temas de Discourse

Instalar este componente de tema

Añade un botón de enlace o texto arbitrario en cualquier salida de complemento (plugin outlet). (Ignore las marcas de agua en las imágenes; tomé estas capturas de pantalla en un sitio de prueba/staging).

Para ver dónde están las salidas de complemento, use Introducing Discourse developer toolbar para encontrarlas. Si no sabe qué es una salida de complemento, puede echar un vistazo a Using Plugin Outlet Connectors from a Theme or Plugin, pero este componente le permite, con algunas restricciones, pegar texto en cualquier salida de complemento sin programar o entender realmente qué es una salida de complemento.

Comencé a desarrollar este complemento para alguien que quería mostrar un botón de “haga clic en este botón para suscribirse y poder enviar mensajes privados” en los perfiles de usuario y tarjetas de usuario. Querían que el botón se mostrara si el usuario no podía enviar mensajes privados. Como no siempre soy tan inteligente como creo, escribí el componente usando grupos para determinar si se mostraba el botón. Un problema con este enfoque era que los miembros del personal no estaban en el grupo de suscriptores, por lo que obtenían el botón de “tienes que suscribirte” a pesar de que podían enviar mensajes privados. Además, el grupo estaba oculto, por lo que era imposible usarlo en un componente de tema de todos modos. Reescribí ese componente de tema para usar currentUser.can_send_private_messages para determinar si mostrar el botón.

¿Para quién es esto?

Si desea colocar un botón con un enlace o algo de texto arbitrario que se muestre u oculte para ciertos grupos, esto le permitirá insertarlos en cualquier salida de complemento. ¿Quiere agregar un enlace de botón “Deberías suscribirte” entre cada mensaje excepto para aquellos que no son miembros? Esto lo hará. ¿Quiere pegar HTML arbitrario en una salida de complemento, solo para ver cómo se verá? Esto lo hará.

Cómo ayuda a los desarrolladores

Este tema tiene algunos ejemplos sencillos de cómo:

pero si está tratando de hacerlo dentro de una <template> dentro de un archivo .gjs, funciona un poco diferente (como {{htmlSafe component.text}})

15 Me gusta

El espacio hace que el texto no sea negrita.


¡Gran componente!

5 Me gusta

¿Sería posible añadir marcadores de posición a las URL de los botones, por ejemplo, para que la URL contenga el ID del tema en el que se encuentra el usuario?

No estoy muy seguro. Si tienes un presupuesto, lo revisaré.

¿Qué haría tu botón si tuviera el ID del tema?

Si lo resuelves y quieres hacer una PR, probablemente la aceptaré.

Estoy bastante seguro de que la respuesta es no, pero que podrías usar la solución alternativa descrita aquí

2 Me gusta

Hola @pfaffman

Queremos añadir un conjunto de botones como este a cada tema para los miembros de nuestro grupo de usuarios de cuentas de empresa.
El botón activaría la creación de un nuevo MP que incluiría la URL actual en la que se encuentra el usuario.

De esta manera, nuestros clientes empresariales pueden enviarnos solicitudes para fijar, resaltar o “patrocinar” temas específicos.

1 me gusta

Como sabes, puedes crear una URL que abrirá un nuevo compositor de temas. Podrías hacer que ese sea el enlace agregado por el componente de tema.

No creo que sea posible hacer eso sin agregar código al componente de tema (¿pero quizás sí lo sea?). Quizás alguien tenga una idea al respecto y ofrezca esa solución aquí (o en el otro tema). Si no, puedes contactarme o publicar en Marketplace con la descripción de lo que necesitas y un presupuesto.

3 Me gusta